From b25861a84a86c72608da97968bad95ff9c09e0c4 Mon Sep 17 00:00:00 2001 From: Hyeongsik Min Date: Tue, 24 Jan 2017 10:57:34 +0900 Subject: [PATCH] Imported Upstream version 7.12 --- ChangeLog | 73 + Makefile.in | 18 +- Makefile.tpl | 18 +- bfd/ChangeLog | 2074 +- bfd/Makefile.in | 71 +- bfd/aclocal.m4 | 74 +- bfd/aout-adobe.c | 1 + bfd/aout-target.h | 4 + bfd/aout-tic30.c | 4 + bfd/aoutx.h | 88 +- bfd/arc-got.h | 513 + bfd/archive.c | 95 +- bfd/archive64.c | 21 +- bfd/archures.c | 22 +- bfd/bfd-in.h | 30 +- bfd/bfd-in2.h | 104 +- bfd/bfd.c | 18 +- bfd/bfdio.c | 8 +- bfd/bfdwin.c | 3 +- bfd/binary.c | 6 +- bfd/bout.c | 9 +- bfd/cache.c | 8 +- bfd/coff-alpha.c | 72 +- bfd/coff-arm.c | 18 +- bfd/coff-h8300.c | 84 +- bfd/coff-h8500.c | 26 +- bfd/coff-i960.c | 29 +- bfd/coff-mcore.c | 18 +- bfd/coff-mips.c | 34 +- bfd/coff-ppc.c | 18 +- bfd/coff-rs6000.c | 25 +- bfd/coff-sh.c | 18 +- bfd/coff-tic80.c | 18 +- bfd/coff-w65.c | 25 +- bfd/coff-z80.c | 26 +- bfd/coff-z8k.c | 54 +- bfd/coff64-rs6000.c | 25 +- bfd/coffcode.h | 4 + bfd/coffgen.c | 8 +- bfd/cofflink.c | 63 +- bfd/config.bfd | 29 +- bfd/config.in | 6 +- bfd/configure | 128 +- bfd/configure.ac | 47 +- bfd/cpu-arm.c | 33 +- bfd/cpu-powerpc.c | 4 + bfd/cpu-sparc.c | 150 + bfd/cpu-v850.c | 2 +- bfd/cpu-v850_rh850.c | 5 +- bfd/doc/Makefile.in | 89 +- bfd/doc/archures.texi | 20 +- bfd/doc/bfd.info | 4197 ++-- bfd/doc/bfdt.texi | 15 +- bfd/doc/bfdver.texi | 4 +- bfd/doc/linker.texi | 26 + bfd/doc/reloc.texi | 7 + bfd/doc/section.texi | 6 +- bfd/doc/syms.texi | 7 +- bfd/doc/targets.texi | 23 +- bfd/dwarf2.c | 36 +- bfd/ecoff.c | 27 +- bfd/elf-bfd.h | 83 +- bfd/elf-eh-frame.c | 18 +- bfd/elf-ifunc.c | 189 +- bfd/elf-m10200.c | 21 +- bfd/elf-m10300.c | 24 +- bfd/elf-s390-common.c | 5 +- bfd/elf-strtab.c | 92 +- bfd/elf.c | 588 +- bfd/elf32-arc.c | 1456 +- bfd/elf32-arm.c | 1228 +- bfd/elf32-avr.c | 58 +- bfd/elf32-bfin.c | 39 +- bfd/elf32-cr16.c | 32 +- bfd/elf32-cr16c.c | 20 +- bfd/elf32-cris.c | 33 +- bfd/elf32-crx.c | 20 +- bfd/elf32-d10v.c | 20 +- bfd/elf32-dlx.c | 3 +- bfd/elf32-dlx.h | 34 + bfd/elf32-epiphany.c | 11 +- bfd/elf32-fr30.c | 14 +- bfd/elf32-frv.c | 7 +- bfd/elf32-ft32.c | 16 +- bfd/elf32-h8300.c | 20 +- bfd/elf32-hppa.c | 55 +- bfd/elf32-hppa.h | 11 + bfd/elf32-i370.c | 20 +- bfd/elf32-i386.c | 1846 +- bfd/elf32-i860.c | 11 +- bfd/elf32-ip2k.c | 11 +- bfd/elf32-iq2000.c | 11 +- bfd/elf32-lm32.c | 31 +- bfd/elf32-m32c.c | 23 +- bfd/elf32-m32r.c | 44 +- bfd/elf32-m68hc1x.c | 87 +- bfd/elf32-m68k.c | 36 +- bfd/elf32-mep.c | 11 +- bfd/elf32-metag.c | 24 +- bfd/elf32-microblaze.c | 27 +- bfd/elf32-mips.c | 24 +- bfd/elf32-moxie.c | 14 +- bfd/elf32-msp430.c | 16 +- bfd/elf32-mt.c | 11 +- bfd/elf32-nds32.c | 60 +- bfd/elf32-nds32.h | 9 + bfd/elf32-nios2.c | 35 +- bfd/elf32-or1k.c | 37 +- bfd/elf32-ppc.c | 276 +- bfd/elf32-ppc.h | 2 + bfd/elf32-rl78.c | 45 +- bfd/elf32-rx.c | 56 +- bfd/elf32-s390.c | 22 +- bfd/elf32-score.c | 46 +- bfd/elf32-score7.c | 46 +- bfd/elf32-sh.c | 29 +- bfd/elf32-sh64.c | 8 +- bfd/elf32-sparc.c | 55 +- bfd/elf32-spu.c | 30 +- bfd/elf32-tic6x.c | 24 +- bfd/elf32-tic6x.h | 8 + bfd/elf32-tilepro.c | 14 +- bfd/elf32-v850.c | 39 +- bfd/elf32-vax.c | 20 +- bfd/elf32-visium.c | 11 +- bfd/elf32-xstormy16.c | 14 +- bfd/elf32-xtensa.c | 75 +- bfd/elf64-alpha.c | 13 +- bfd/elf64-hppa.c | 41 +- bfd/elf64-ia64-vms.c | 26 +- bfd/elf64-mips.c | 56 +- bfd/elf64-mmix.c | 24 +- bfd/elf64-ppc.c | 390 +- bfd/elf64-s390.c | 53 +- bfd/elf64-sh64.c | 41 +- bfd/elf64-sparc.c | 5 +- bfd/elf64-x86-64.c | 2195 +- bfd/elfcode.h | 1 + bfd/elflink.c | 902 +- bfd/elfn32-mips.c | 33 +- bfd/elfnn-aarch64.c | 145 +- bfd/elfnn-ia64.c | 24 +- bfd/elfxx-aarch64.c | 5 +- bfd/elfxx-mips.c | 358 +- bfd/elfxx-sparc.c | 72 +- bfd/elfxx-target.h | 42 +- bfd/elfxx-tilegx.c | 14 +- bfd/format.c | 17 +- bfd/i386msdos.c | 1 + bfd/i386os9k.c | 1 + bfd/ieee.c | 1 + bfd/ihex.c | 4 +- bfd/libbfd-in.h | 34 +- bfd/libbfd.h | 40 +- bfd/libecoff.h | 1 + bfd/linker.c | 114 +- bfd/mach-o-target.c | 1 + bfd/mach-o.c | 2 +- bfd/mmo.c | 5 +- bfd/nlm-target.h | 1 + bfd/oasys.c | 1 + bfd/pdp11.c | 49 +- bfd/pe-mips.c | 9 +- bfd/peXXigen.c | 14 +- bfd/pef.c | 4 +- bfd/pei-x86_64.c | 3 +- bfd/plugin.c | 79 +- bfd/plugin.h | 4 +- bfd/po/SRC-POTFILES.in | 1 + bfd/po/sr.gmo | Bin 0 -> 202462 bytes bfd/po/sr.po | 6811 ++++++ bfd/po/sv.gmo | Bin 67266 -> 155196 bytes bfd/po/sv.po | 7310 +++++-- bfd/po/zh_CN.gmo | Bin 16407 -> 17843 bytes bfd/po/zh_CN.po | 111 +- bfd/ppcboot.c | 1 + bfd/reloc.c | 90 +- bfd/reloc16.c | 8 +- bfd/section.c | 6 +- bfd/simple.c | 18 +- bfd/som.c | 25 +- bfd/srec.c | 4 +- bfd/stab-syms.c | 3 +- bfd/syms.c | 13 +- bfd/targets.c | 31 +- bfd/tekhex.c | 4 +- bfd/versados.c | 1 + bfd/version.h | 2 +- bfd/version.m4 | 2 +- bfd/vms-alpha.c | 8 +- bfd/warning.m4 | 11 + bfd/xcofflink.c | 56 +- bfd/xsym.c | 6 +- config.guess | 93 +- config.sub | 10 +- config/isl.m4 | 16 +- configure | 51 +- configure.ac | 16 +- cpu/ChangeLog | 9 + cpu/fr30.cpu | 10 +- djunpack.bat | 4 +- etc/ChangeLog | 10 + etc/texi2pod.pl | 4 +- gdb/ChangeLog | 4379 +++- gdb/MAINTAINERS | 6 +- gdb/Makefile.in | 42 +- gdb/NEWS | 153 +- gdb/aarch32-linux-nat.c | 18 +- gdb/aarch64-linux-nat.c | 52 +- gdb/aarch64-linux-tdep.c | 78 +- gdb/aarch64-tdep.c | 40 +- gdb/ada-exp.c | 533 +- gdb/ada-exp.y | 59 +- gdb/ada-lang.c | 135 +- gdb/ada-lang.h | 2 +- gdb/ada-typeprint.c | 2 +- gdb/aix-thread.c | 8 +- gdb/alpha-mdebug-tdep.c | 2 - gdb/alpha-tdep.c | 1 - gdb/amd64-darwin-tdep.c | 1 - gdb/amd64-dicos-tdep.c | 2 - gdb/amd64-linux-nat.c | 12 +- gdb/amd64-linux-tdep.c | 12 +- gdb/amd64-linux-tdep.h | 1 + gdb/amd64-tdep.c | 80 +- gdb/amd64-windows-tdep.c | 15 - gdb/amd64bsd-nat.c | 94 +- gdb/amd64fbsd-nat.c | 33 +- gdb/annotate.c | 15 +- gdb/arch-utils.c | 33 +- gdb/arch-utils.h | 7 + gdb/arch/arm-get-next-pcs.c | 15 +- gdb/arch/arm-get-next-pcs.h | 6 +- gdb/arch/arm-linux.c | 82 + gdb/arch/arm-linux.h | 7 + gdb/arm-linux-nat.c | 2 +- gdb/arm-linux-tdep.c | 412 +- gdb/arm-linux-tdep.h | 3 - gdb/arm-symbian-tdep.c | 2 - gdb/arm-tdep.c | 807 +- gdb/arm-tdep.h | 3 - gdb/auto-load.c | 3 +- gdb/auxv.c | 204 +- gdb/auxv.h | 14 + gdb/avr-tdep.c | 19 +- gdb/ax-general.c | 9 +- gdb/bfin-linux-tdep.c | 1 - gdb/bfin-tdep.c | 11 - gdb/blockframe.c | 1 - gdb/break-catch-sig.c | 3 +- gdb/break-catch-syscall.c | 105 +- gdb/break-catch-throw.c | 1 - gdb/breakpoint.c | 195 +- gdb/breakpoint.h | 17 +- gdb/btrace.c | 4 +- gdb/build-with-cxx.m4 | 4 +- gdb/c-exp.c | 1047 +- gdb/c-exp.y | 63 +- gdb/c-lang.c | 31 +- gdb/c-lang.h | 6 +- gdb/c-typeprint.c | 51 + gdb/c-valprint.c | 24 +- gdb/cli/cli-cmds.c | 13 +- gdb/cli/cli-decode.c | 41 +- gdb/cli/cli-decode.h | 6 + gdb/cli/cli-interp.c | 293 +- gdb/cli/cli-interp.h | 32 + gdb/cli/cli-script.c | 33 +- gdb/coffread.c | 2 - gdb/command.h | 16 + gdb/common/btrace-common.c | 20 + gdb/common/btrace-common.h | 3 + gdb/common/buffer.h | 9 + gdb/common/common-exceptions.c | 47 +- gdb/common/common-exceptions.h | 89 +- gdb/common/common-utils.c | 6 + gdb/common/common.m4 | 2 +- gdb/common/signals-state-save-restore.c | 94 + gdb/common/signals-state-save-restore.h | 39 + gdb/common/signals.c | 8 + gdb/common/x86-xstate.h | 5 +- gdb/compile/compile-object-load.c | 22 +- gdb/compile/compile.c | 14 +- gdb/completer.c | 3 +- gdb/config.in | 6 + gdb/config/i386/fbsd.mh | 4 +- gdb/config/i386/fbsd64.mh | 2 +- gdb/config/i386/nbsd64.mh | 2 +- gdb/config/i386/nbsdelf.mh | 2 +- gdb/config/i386/obsd.mh | 2 +- gdb/config/i386/obsd64.mh | 2 +- gdb/configure | 185 +- gdb/configure.ac | 42 +- gdb/configure.tgt | 18 +- gdb/corefile.c | 49 +- gdb/corelow.c | 12 +- gdb/cp-abi.c | 4 +- gdb/cp-abi.h | 8 +- gdb/cp-namespace.c | 16 +- gdb/cp-support.c | 22 +- gdb/cp-support.h | 4 + gdb/cp-valprint.c | 15 +- gdb/cris-tdep.c | 30 +- gdb/ctf.c | 54 +- gdb/d-exp.c | 404 +- gdb/d-exp.y | 64 +- gdb/d-lang.c | 18 +- gdb/d-lang.h | 2 +- gdb/d-namespace.c | 47 +- gdb/d-valprint.c | 2 +- gdb/darwin-nat.c | 14 +- gdb/data-directory/Makefile.in | 23 +- gdb/dbxread.c | 20 - gdb/defs.h | 118 +- gdb/dicos-tdep.c | 2 - gdb/disasm.c | 10 +- gdb/doc/ChangeLog | 167 + gdb/doc/agentexpr.texi | 3 +- gdb/doc/gcore.1 | 2 +- gdb/doc/gdb.1 | 6 +- gdb/doc/gdb.info | 1434 +- gdb/doc/gdb.info-1 | 398 +- gdb/doc/gdb.info-2 | 439 +- gdb/doc/gdb.info-3 | 450 +- gdb/doc/gdb.info-4 | 557 +- gdb/doc/gdb.info-5 | 513 +- gdb/doc/gdb.info-6 | 875 +- gdb/doc/gdb.info-7 | 792 +- gdb/doc/gdb.texinfo | 890 +- gdb/doc/gdbinit.5 | 2 +- gdb/doc/gdbserver.1 | 2 +- gdb/doc/observer.texi | 11 +- gdb/doc/python.texi | 119 +- gdb/doublest.c | 47 +- gdb/doublest.h | 4 + gdb/dtrace-probe.c | 2 - gdb/dwarf2-frame.c | 2 - gdb/dwarf2loc.c | 268 +- gdb/dwarf2read.c | 214 +- gdb/elfread.c | 3 - gdb/eval.c | 16 +- gdb/event-loop.c | 46 +- gdb/event-loop.h | 26 +- gdb/event-top.c | 1027 +- gdb/event-top.h | 18 +- gdb/exceptions.c | 26 +- gdb/exec.c | 99 +- gdb/expprint.c | 56 + gdb/expression.h | 13 + gdb/extension-priv.h | 7 +- gdb/extension.c | 38 +- gdb/extension.h | 2 +- gdb/f-exp.c | 415 +- gdb/f-exp.y | 79 +- gdb/f-lang.c | 17 +- gdb/f-lang.h | 15 +- gdb/f-typeprint.c | 33 +- gdb/f-valprint.c | 151 +- gdb/fbsd-nat.c | 453 +- gdb/fbsd-tdep.c | 56 + gdb/features/Makefile | 19 + gdb/features/aarch64-core.xml | 23 +- gdb/features/aarch64.c | 19 +- gdb/features/feature_to_c.sh | 8 +- gdb/features/gdb-target.dtd | 10 + gdb/features/i386/32bit-mpx.xml | 6 +- gdb/features/i386/64bit-mpx.xml | 5 +- gdb/features/i386/amd64-avx-linux.c | 66 +- gdb/features/i386/amd64-avx-mpx-linux.c | 211 + gdb/features/i386/amd64-avx-mpx-linux.xml | 19 + gdb/features/i386/amd64-avx-mpx.c | 206 + gdb/features/i386/amd64-avx-mpx.xml | 17 + gdb/features/i386/amd64-avx.c | 66 +- gdb/features/i386/amd64-avx512-linux.c | 66 +- gdb/features/i386/amd64-avx512.c | 66 +- gdb/features/i386/amd64-linux.c | 66 +- gdb/features/i386/amd64-mpx-linux.c | 96 +- gdb/features/i386/amd64-mpx-linux.xml | 1 - gdb/features/i386/amd64-mpx.c | 96 +- gdb/features/i386/amd64-mpx.xml | 1 - gdb/features/i386/amd64.c | 66 +- gdb/features/i386/i386-avx-linux.c | 66 +- gdb/features/i386/i386-avx-mpx-linux.c | 187 + gdb/features/i386/i386-avx-mpx-linux.xml | 19 + gdb/features/i386/i386-avx-mpx.c | 182 + gdb/features/i386/i386-avx-mpx.xml | 17 + gdb/features/i386/i386-avx.c | 66 +- gdb/features/i386/i386-avx512-linux.c | 68 +- gdb/features/i386/i386-avx512.c | 68 +- gdb/features/i386/i386-linux.c | 66 +- gdb/features/i386/i386-mmx-linux.c | 37 +- gdb/features/i386/i386-mmx.c | 37 +- gdb/features/i386/i386-mpx-linux.c | 90 +- gdb/features/i386/i386-mpx-linux.xml | 1 - gdb/features/i386/i386-mpx.c | 90 +- gdb/features/i386/i386-mpx.xml | 1 - gdb/features/i386/i386.c | 66 +- gdb/features/i386/x32-avx-linux.c | 66 +- gdb/features/i386/x32-avx.c | 66 +- gdb/features/i386/x32-avx512-linux.c | 66 +- gdb/features/i386/x32-avx512.c | 66 +- gdb/features/i386/x32-linux.c | 66 +- gdb/features/i386/x32.c | 66 +- gdb/features/nds32-core.xml | 44 + gdb/features/nds32-fpu.xml | 42 + gdb/features/nds32-system.xml | 14 + gdb/features/nds32.c | 92 + gdb/features/nds32.xml | 14 + gdb/findvar.c | 36 +- gdb/fork-child.c | 26 +- gdb/frame.c | 13 + gdb/frame.h | 14 + gdb/frv-linux-tdep.c | 1 - gdb/frv-tdep.c | 2 + gdb/ft32-tdep.c | 3 +- gdb/gdb_proc_service.h | 6 +- gdb/gdb_select.h | 15 + gdb/gdbarch.c | 102 + gdb/gdbarch.h | 45 +- gdb/gdbarch.sh | 32 +- gdb/gdbcore.h | 8 +- gdb/gdbserver/ChangeLog | 957 +- gdb/gdbserver/Makefile.in | 148 +- gdb/gdbserver/config.in | 3 + gdb/gdbserver/configure | 119 +- gdb/gdbserver/configure.ac | 14 + gdb/gdbserver/configure.srv | 46 +- gdb/gdbserver/gdb_proc_service.h | 2 +- gdb/gdbserver/gdbthread.h | 3 + gdb/gdbserver/inferiors.c | 14 +- gdb/gdbserver/inferiors.h | 2 +- gdb/gdbserver/linux-aarch32-low.c | 12 +- gdb/gdbserver/linux-aarch64-ipa.c | 66 +- gdb/gdbserver/linux-aarch64-low.c | 67 +- gdb/gdbserver/linux-amd64-ipa.c | 116 +- gdb/gdbserver/linux-arm-low.c | 51 +- gdb/gdbserver/linux-crisv32-low.c | 2 +- gdb/gdbserver/linux-i386-ipa.c | 56 +- gdb/gdbserver/linux-low.c | 524 +- gdb/gdbserver/linux-low.h | 15 +- gdb/gdbserver/linux-m68k-low.c | 2 +- gdb/gdbserver/linux-mips-low.c | 2 +- gdb/gdbserver/linux-nios2-low.c | 6 +- gdb/gdbserver/linux-ppc-ipa.c | 246 + gdb/gdbserver/linux-ppc-low.c | 2649 ++- gdb/gdbserver/linux-ppc-tdesc.h | 101 + gdb/gdbserver/linux-s390-ipa.c | 454 + gdb/gdbserver/linux-s390-low.c | 2361 ++- gdb/gdbserver/linux-s390-tdesc.h | 102 + gdb/gdbserver/linux-tic6x-low.c | 2 +- gdb/gdbserver/linux-x86-low.c | 139 +- gdb/gdbserver/linux-x86-tdesc.h | 98 + gdb/gdbserver/linux-xtensa-low.c | 2 +- gdb/gdbserver/mem-break.c | 410 +- gdb/gdbserver/mem-break.h | 44 +- gdb/gdbserver/remote-utils.c | 45 +- gdb/gdbserver/server.c | 25 +- gdb/gdbserver/server.h | 4 + gdb/gdbserver/spu-low.c | 10 +- gdb/gdbserver/target.h | 7 + gdb/gdbserver/tracepoint.c | 383 +- gdb/gdbserver/tracepoint.h | 11 +- gdb/gdbserver/utils.c | 8 - gdb/gdbserver/win32-low.c | 4 +- gdb/gdbthread.h | 9 +- gdb/gdbtypes.c | 137 +- gdb/gdbtypes.h | 39 +- gdb/gnu-nat.c | 12 +- gdb/gnu-v2-abi.c | 6 +- gdb/gnu-v3-abi.c | 4 +- gdb/go-exp.c | 333 +- gdb/go-exp.y | 57 +- gdb/go-lang.c | 13 +- gdb/go-lang.h | 2 +- gdb/go-valprint.c | 2 +- gdb/go32-nat.c | 2 +- gdb/guile/guile-internal.h | 2 +- gdb/guile/guile.c | 19 +- gdb/guile/scm-ports.c | 10 +- gdb/guile/scm-pretty-print.c | 2 +- gdb/h8300-tdep.c | 9 +- gdb/hppa-linux-tdep.c | 1 + gdb/hppa-tdep.c | 7 - gdb/hppanbsd-tdep.c | 2 - gdb/hppaobsd-tdep.c | 1 - gdb/i386-darwin-tdep.c | 1 - gdb/i386-dicos-tdep.c | 2 - gdb/i386-linux-nat.c | 2 +- gdb/i386-linux-tdep.c | 73 + gdb/i386-linux-tdep.h | 6 + gdb/i386-tdep.c | 152 +- gdb/i386-tdep.h | 6 + gdb/i386bsd-nat.c | 103 +- gdb/i386bsd-nat.h | 15 - gdb/i386fbsd-nat.c | 18 +- gdb/i386nbsd-tdep.c | 1 - gdb/i386obsd-tdep.c | 2 - gdb/ia64-libunwind-tdep.c | 97 +- gdb/ia64-linux-nat.c | 6 +- gdb/ia64-tdep.c | 16 +- gdb/inf-loop.c | 2 +- gdb/inf-ptrace.c | 20 +- gdb/inf-ptrace.h | 4 + gdb/infcall.c | 56 +- gdb/infcmd.c | 181 +- gdb/inferior.c | 40 +- gdb/inferior.h | 3 + gdb/inflow.c | 105 +- gdb/infrun.c | 222 +- gdb/infrun.h | 19 +- gdb/interps.c | 303 +- gdb/interps.h | 70 +- gdb/iq2000-tdep.c | 5 - gdb/jit.c | 85 +- gdb/jv-exp.c | 405 +- gdb/jv-exp.y | 63 +- gdb/jv-lang.c | 18 +- gdb/jv-lang.h | 2 +- gdb/jv-valprint.c | 2 +- gdb/language.c | 36 +- gdb/language.h | 30 + gdb/linespec.c | 5 +- gdb/linux-nat.c | 398 +- gdb/linux-nat.h | 4 +- gdb/linux-record.c | 2231 +- gdb/linux-record.h | 6 + gdb/linux-tdep.c | 105 +- gdb/linux-thread-db.c | 24 +- gdb/location.c | 7 +- gdb/m2-exp.c | 385 +- gdb/m2-exp.y | 63 +- gdb/m2-lang.c | 4 +- gdb/m2-lang.h | 2 +- gdb/m2-valprint.c | 8 +- gdb/m32c-tdep.c | 10 +- gdb/m32r-linux-tdep.c | 1 - gdb/m32r-tdep.c | 2 - gdb/m68klinux-nat.c | 2 +- gdb/m68klinux-tdep.c | 1 - gdb/machoread.c | 8 - gdb/macrotab.c | 2 +- gdb/main.c | 67 +- gdb/maint.c | 19 +- gdb/mdebugread.c | 18 +- gdb/mem-break.c | 3 +- gdb/mi/mi-cmd-stack.c | 3 - gdb/mi/mi-cmds.c | 6 +- gdb/mi/mi-cmds.h | 3 - gdb/mi/mi-common.h | 7 + gdb/mi/mi-interp.c | 1220 +- gdb/mi/mi-main.c | 186 +- gdb/mi/mi-main.h | 6 +- gdb/microblaze-tdep.c | 4 +- gdb/mingw-hdep.c | 52 +- gdb/minsyms.c | 1 - gdb/mips-linux-nat.c | 2 +- gdb/mips-tdep.c | 70 +- gdb/mips-tdep.h | 3 - gdb/mn10300-tdep.c | 2 - gdb/msp430-tdep.c | 1 - gdb/mt-tdep.c | 3 +- gdb/nat/aarch64-linux-hw-point.c | 8 +- gdb/nat/aarch64-linux-hw-point.h | 2 + gdb/nat/aarch64-linux.c | 2 +- gdb/nat/aarch64-linux.h | 2 +- gdb/nat/amd64-linux-siginfo.c | 298 +- gdb/nat/gdb_thread_db.h | 1 - gdb/nat/linux-procfs.c | 86 +- gdb/nat/linux-ptrace.c | 22 +- gdb/nds32-tdep.c | 2184 ++ gdb/nds32-tdep.h | 54 + gdb/nios2-tdep.c | 9 +- gdb/nto-procfs.c | 18 +- gdb/objc-lang.c | 18 +- gdb/opencl-lang.c | 16 +- gdb/osabi.c | 18 +- gdb/p-exp.c | 357 +- gdb/p-exp.y | 63 +- gdb/p-lang.c | 9 +- gdb/p-lang.h | 4 +- gdb/p-valprint.c | 14 +- gdb/parse.c | 6 +- gdb/po/gdb.pot | 9187 ++++---- gdb/posix-hdep.c | 13 - gdb/ppc-linux-nat.c | 6 +- gdb/ppc-ravenscar-thread.c | 1 - gdb/ppcfbsd-tdep.c | 1 - gdb/printcmd.c | 262 +- gdb/proc-events.c | 3 + gdb/psymtab.c | 3 +- gdb/ptrace.m4 | 10 - gdb/python/lib/gdb/command/frame_filters.py | 60 +- gdb/python/lib/gdb/command/unwinders.py | 2 + gdb/python/lib/gdb/function/as_string.py | 39 + gdb/python/lib/gdb/unwinder.py | 1 + gdb/python/py-breakpoint.c | 90 +- gdb/python/py-events.h | 3 + gdb/python/py-evts.c | 13 +- gdb/python/py-finishbreakpoint.c | 2 - gdb/python/py-frame.c | 6 +- gdb/python/py-framefilter.c | 8 +- gdb/python/py-inferior.c | 2 - gdb/python/py-infevents.c | 2 - gdb/python/py-infthread.c | 2 - gdb/python/py-linetable.c | 4 - gdb/python/py-objfile.c | 15 +- gdb/python/py-prettyprint.c | 2 +- gdb/python/py-progspace.c | 9 +- gdb/python/py-symtab.c | 9 +- gdb/python/py-unwind.c | 3 - gdb/python/py-utils.c | 8 + gdb/python/py-value.c | 11 +- gdb/python/py-varobj.c | 1 - gdb/python/py-xmethods.c | 12 - gdb/python/python-internal.h | 4 +- gdb/python/python.c | 96 +- gdb/ravenscar-thread.c | 1 - gdb/record-btrace.c | 55 +- gdb/record-btrace.h | 28 + gdb/record-full.c | 66 +- gdb/record.c | 2 +- gdb/regcache.c | 15 +- gdb/regcache.h | 8 + gdb/regformats/i386/amd64-avx-mpx-linux.dat | 85 + gdb/regformats/i386/amd64-avx-mpx.dat | 84 + gdb/regformats/i386/amd64-mpx-linux.dat | 16 - gdb/regformats/i386/amd64-mpx.dat | 16 - gdb/regformats/i386/i386-avx-mpx-linux.dat | 61 + gdb/regformats/i386/i386-avx-mpx.dat | 60 + gdb/regformats/i386/i386-mpx-linux.dat | 8 - gdb/regformats/i386/i386-mpx.dat | 8 - gdb/remote-fileio.c | 109 +- gdb/remote-m32r-sdi.c | 1722 -- gdb/remote-mips.c | 3771 ---- gdb/remote-sim.c | 5 +- gdb/remote.c | 466 +- gdb/rs6000-aix-tdep.c | 2 - gdb/rs6000-lynx178-tdep.c | 2 - gdb/rs6000-nat.c | 9 +- gdb/rs6000-tdep.c | 147 +- gdb/rust-exp.c | 4673 +++++ gdb/rust-exp.y | 2764 +++ gdb/rust-lang.c | 2129 ++ gdb/rust-lang.h | 50 + gdb/s390-linux-nat.c | 6 +- gdb/s390-linux-tdep.c | 180 +- gdb/score-tdep.c | 17 +- gdb/selftest.c | 67 + gdb/selftest.h | 44 + gdb/ser-base.c | 30 +- gdb/ser-event.c | 220 + gdb/ser-event.h | 51 + gdb/ser-go32.c | 31 +- gdb/ser-unix.c | 108 +- gdb/serial.c | 66 +- gdb/serial.h | 12 +- gdb/sh-tdep.c | 2 - gdb/sh64-tdep.c | 38 +- gdb/skip.c | 523 +- gdb/solib-aix.c | 1 - gdb/solib-darwin.c | 2 - gdb/solib-dsbt.c | 2 - gdb/solib-frv.c | 3 - gdb/solib-svr4.c | 1 - gdb/source.c | 39 +- gdb/sparc-tdep.c | 3 +- gdb/sparc-tdep.h | 2 - gdb/sparc64-linux-tdep.c | 1 - gdb/sparcobsd-tdep.c | 2 - gdb/spu-linux-nat.c | 4 +- gdb/spu-tdep.c | 9 +- gdb/stack.c | 62 +- gdb/std-operator.def | 12 +- gdb/symfile-mem.c | 3 +- gdb/symfile.c | 151 +- gdb/symfile.h | 5 + gdb/symmisc.c | 109 +- gdb/symtab.c | 151 +- gdb/symtab.h | 13 +- gdb/syscalls/aarch64-linux.xml | 318 +- gdb/syscalls/aarch64-linux.xml.in | 271 + gdb/syscalls/amd64-linux.xml | 367 +- gdb/syscalls/amd64-linux.xml.in | 314 + gdb/syscalls/apply-defaults.xsl | 43 + gdb/syscalls/arm-linux.xml | 449 +- gdb/syscalls/arm-linux.xml.in | 398 + gdb/syscalls/{bfin-linux.xml => bfin-linux.xml.in} | 0 gdb/syscalls/freebsd.xml | 410 + gdb/syscalls/gdb-syscalls.dtd | 3 +- gdb/syscalls/i386-linux.xml | 357 +- gdb/syscalls/i386-linux.xml.in | 340 + gdb/syscalls/linux-defaults.xml.in | 243 + gdb/syscalls/mips-n32-linux.xml | 381 +- gdb/syscalls/mips-n32-linux.xml.in | 319 + gdb/syscalls/mips-n64-linux.xml | 371 +- gdb/syscalls/mips-n64-linux.xml.in | 312 + gdb/syscalls/mips-o32-linux.xml | 405 +- gdb/syscalls/mips-o32-linux.xml.in | 347 + gdb/syscalls/ppc-linux.xml | 325 +- gdb/syscalls/ppc-linux.xml.in | 310 + gdb/syscalls/ppc64-linux.xml | 295 +- gdb/syscalls/ppc64-linux.xml.in | 295 + gdb/syscalls/s390-linux.xml | 390 +- gdb/syscalls/s390-linux.xml.in | 367 + gdb/syscalls/s390x-linux.xml | 364 +- gdb/syscalls/s390x-linux.xml.in | 334 + gdb/syscalls/sparc-linux.xml | 403 +- gdb/syscalls/sparc-linux.xml.in | 344 + gdb/syscalls/sparc64-linux.xml | 389 +- gdb/syscalls/sparc64-linux.xml.in | 326 + gdb/target-debug.h | 2 + gdb/target-delegates.c | 66 +- gdb/target-descriptions.c | 305 +- gdb/target-descriptions.h | 12 +- gdb/target.c | 103 +- gdb/target.h | 56 +- gdb/terminal.h | 4 +- gdb/testsuite/ChangeLog | 1487 +- gdb/testsuite/ChangeLog-1993-2013 | 9 - gdb/testsuite/Makefile.in | 67 +- gdb/testsuite/README | 101 +- gdb/testsuite/analyze-racy-logs.py | 177 + gdb/testsuite/boards/gdbserver-base.exp | 9 +- gdb/testsuite/gdb.ada/arraydim.exp | 4 +- gdb/testsuite/gdb.ada/cond_lang.exp | 4 +- gdb/testsuite/gdb.ada/exec_changed.exp | 7 +- gdb/testsuite/gdb.ada/lang_switch.exp | 4 +- gdb/testsuite/gdb.ada/mi_catch_ex.exp | 41 +- gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp | 6 - gdb/testsuite/gdb.arch/arm-disp-step.exp | 11 +- gdb/testsuite/gdb.arch/arm-neon.exp | 2 +- .../gdb.arch/arm-single-step-kernel-helper.c | 30 + .../gdb.arch/arm-single-step-kernel-helper.exp | 97 + gdb/testsuite/gdb.arch/ftrace-insn-reloc.exp | 4 +- gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c | 120 + gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp | 76 + gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c | 66 + gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp | 140 + gdb/testsuite/gdb.arch/mips-fcr.c | 22 + gdb/testsuite/gdb.arch/mips-fcr.exp | 54 + gdb/testsuite/gdb.arch/s390-multiarch.exp | 9 +- gdb/testsuite/gdb.arch/s390-stackless.S | 33 + gdb/testsuite/gdb.arch/s390-stackless.exp | 39 + gdb/testsuite/gdb.arch/s390-tdbregs.exp | 17 +- gdb/testsuite/gdb.arch/thumb-prologue.exp | 4 +- gdb/testsuite/gdb.arch/thumb2-it.exp | 4 +- .../gdb.base/annota-input-while-running.exp | 25 +- gdb/testsuite/gdb.base/annota1.exp | 13 +- gdb/testsuite/gdb.base/annota3.exp | 10 +- gdb/testsuite/gdb.base/attach-pie-noexec.exp | 2 +- gdb/testsuite/gdb.base/bad-file.exp | 54 + .../gdb.base/batch-preserve-term-settings.exp | 3 +- gdb/testsuite/gdb.base/branch-to-self.c | 40 + gdb/testsuite/gdb.base/branch-to-self.exp | 74 + gdb/testsuite/gdb.base/branches.c | 113 - gdb/testsuite/gdb.base/call-ar-st.exp | 3 +- gdb/testsuite/gdb.base/call-rt-st.exp | 3 +- gdb/testsuite/gdb.base/call-sc.exp | 3 +- gdb/testsuite/gdb.base/call-signal-resume.exp | 3 +- gdb/testsuite/gdb.base/call-strs.exp | 3 +- gdb/testsuite/gdb.base/callexit.exp | 3 +- gdb/testsuite/gdb.base/callfuncs.exp | 3 +- gdb/testsuite/gdb.base/catch-fork-kill.c | 1 + gdb/testsuite/gdb.base/catch-load.exp | 2 +- gdb/testsuite/gdb.base/catch-syscall.c | 8 + gdb/testsuite/gdb.base/catch-syscall.exp | 82 +- gdb/testsuite/gdb.base/command-line-input.exp | 36 + gdb/testsuite/gdb.base/ctxobj.exp | 3 +- gdb/testsuite/gdb.base/default.exp | 5 +- gdb/testsuite/gdb.base/detach.exp | 5 - gdb/testsuite/gdb.base/disp-step-syscall.exp | 160 - gdb/testsuite/gdb.base/dprintf-pending.exp | 4 +- gdb/testsuite/gdb.base/dso2dso.exp | 3 +- gdb/testsuite/gdb.base/examine-backward.c | 106 + gdb/testsuite/gdb.base/examine-backward.exp | 324 + gdb/testsuite/gdb.base/fixsection.exp | 2 +- gdb/testsuite/gdb.base/float.exp | 9 + gdb/testsuite/gdb.base/gcore-relro.exp | 4 +- gdb/testsuite/gdb.base/gdb1555.exp | 2 +- gdb/testsuite/gdb.base/gdbhistsize-history.exp | 8 +- gdb/testsuite/gdb.base/gdbinit-history.exp | 10 +- .../gdb.base/global-var-nested-by-dso.exp | 3 +- gdb/testsuite/gdb.base/gnu-ifunc.exp | 2 +- .../gdb.base/hbreak-in-shr-unsupported.exp | 2 +- gdb/testsuite/gdb.base/infcall-input.c | 34 + gdb/testsuite/gdb.base/infcall-input.exp | 55 + gdb/testsuite/gdb.base/jit-attach-pie.c | 61 + gdb/testsuite/gdb.base/jit-attach-pie.exp | 48 + gdb/testsuite/gdb.base/jit-main.c | 152 +- gdb/testsuite/gdb.base/jit-protocol.h | 54 + gdb/testsuite/gdb.base/jit-reader.exp | 251 + gdb/testsuite/gdb.base/jit-simple-dl.c | 25 + gdb/testsuite/gdb.base/jit-simple-jit.c | 50 + gdb/testsuite/gdb.base/jit-simple.c | 43 +- gdb/testsuite/gdb.base/jit-simple.exp | 157 +- gdb/testsuite/gdb.base/jit-so.exp | 15 +- gdb/testsuite/gdb.base/jit.exp | 6 +- gdb/testsuite/gdb.base/jithost.c | 75 + gdb/testsuite/gdb.base/jithost.h | 27 + gdb/testsuite/gdb.base/jitreader.c | 199 + gdb/testsuite/gdb.base/maint.exp | 35 +- gdb/testsuite/gdb.base/new-ui-echo.c | 30 + gdb/testsuite/gdb.base/new-ui-echo.exp | 127 + gdb/testsuite/gdb.base/new-ui-pending-input.c | 26 + gdb/testsuite/gdb.base/new-ui-pending-input.exp | 123 + gdb/testsuite/gdb.base/new-ui.c | 42 + gdb/testsuite/gdb.base/new-ui.exp | 173 + gdb/testsuite/gdb.base/nodebug.exp | 3 +- gdb/testsuite/gdb.base/offsets.c | 28 + gdb/testsuite/gdb.base/offsets.exp | 45 + gdb/testsuite/gdb.base/pending.exp | 4 +- gdb/testsuite/gdb.base/print-file-var.exp | 3 +- gdb/testsuite/gdb.base/print-symbol-loading.exp | 2 +- gdb/testsuite/gdb.base/printcmds.exp | 11 +- gdb/testsuite/gdb.base/ptype.exp | 6 +- gdb/testsuite/gdb.base/return.c | 17 + gdb/testsuite/gdb.base/set-inferior-tty.c | 24 + gdb/testsuite/gdb.base/set-inferior-tty.exp | 40 + gdb/testsuite/gdb.base/shlib-call.exp | 3 +- gdb/testsuite/gdb.base/shreloc.exp | 3 +- gdb/testsuite/gdb.base/signals-state-child.c | 101 + gdb/testsuite/gdb.base/signals-state-child.exp | 98 + gdb/testsuite/gdb.base/skip-solib.exp | 8 +- gdb/testsuite/gdb.base/skip.c | 62 +- gdb/testsuite/gdb.base/skip.exp | 334 +- gdb/testsuite/gdb.base/skip1.c | 34 +- gdb/testsuite/gdb.base/so-impl-ld.exp | 2 +- gdb/testsuite/gdb.base/solib-disc.exp | 6 +- gdb/testsuite/gdb.base/solib-display.exp | 19 +- gdb/testsuite/gdb.base/solib-nodir.exp | 2 +- gdb/testsuite/gdb.base/solib-overlap.exp | 3 +- gdb/testsuite/gdb.base/solib-symbol.exp | 2 +- gdb/testsuite/gdb.base/solib-weak.exp | 3 +- gdb/testsuite/gdb.base/step-over-clone.c | 54 + gdb/testsuite/gdb.base/step-over-exit.c | 50 + gdb/testsuite/gdb.base/step-over-exit.exp | 127 + .../{disp-step-fork.c => step-over-fork.c} | 0 gdb/testsuite/gdb.base/step-over-syscall.exp | 286 + .../{disp-step-vfork.c => step-over-vfork.c} | 0 gdb/testsuite/gdb.base/structs.exp | 3 +- gdb/testsuite/gdb.base/sym-file.exp | 2 +- gdb/testsuite/gdb.base/symtab-search-order.exp | 2 +- gdb/testsuite/gdb.base/type-opaque.exp | 2 +- gdb/testsuite/gdb.base/unload.exp | 3 +- gdb/testsuite/gdb.base/unwindonsignal.exp | 3 +- gdb/testsuite/gdb.base/vdso-warning.exp | 76 +- gdb/testsuite/gdb.base/watchpoint-solib.exp | 2 +- gdb/testsuite/gdb.base/whatis.c | 8 +- gdb/testsuite/gdb.base/whatis.exp | 83 + gdb/testsuite/gdb.base/wrong_frame_bt_full.exp | 5 +- gdb/testsuite/gdb.btrace/gcore.exp | 3 +- gdb/testsuite/gdb.btrace/instruction_history.c | 2 + gdb/testsuite/gdb.btrace/reconnect.c | 25 + gdb/testsuite/gdb.btrace/reconnect.exp | 79 + gdb/testsuite/gdb.btrace/record_goto.exp | 10 +- gdb/testsuite/gdb.btrace/stepi.exp | 17 +- gdb/testsuite/gdb.btrace/tailcall-only.exp | 12 +- gdb/testsuite/gdb.btrace/tailcall.exp | 12 +- gdb/testsuite/gdb.compile/compile.exp | 10 +- gdb/testsuite/gdb.cp/anon-struct.exp | 4 +- gdb/testsuite/gdb.cp/cpexprs.exp | 4 +- gdb/testsuite/gdb.cp/gdb2384.exp | 2 +- gdb/testsuite/gdb.cp/gdb2495.exp | 3 +- gdb/testsuite/gdb.cp/infcall-dlopen.exp | 2 +- gdb/testsuite/gdb.cp/m-static.exp | 2 +- gdb/testsuite/gdb.cp/re-set-overloaded.exp | 2 +- gdb/testsuite/gdb.cp/scope-err.cc | 35 + gdb/testsuite/gdb.cp/scope-err.exp | 49 + gdb/testsuite/gdb.cp/templates.exp | 3 +- gdb/testsuite/gdb.cp/virtfunc.exp | 3 +- gdb/testsuite/gdb.cp/vla-cxx.cc | 1 + gdb/testsuite/gdb.dlang/circular.c | 33 + gdb/testsuite/gdb.dlang/circular.exp | 149 + gdb/testsuite/gdb.dwarf2/atomic-type.exp | 10 +- gdb/testsuite/gdb.dwarf2/atomic.c | 2 +- .../gdb.dwarf2/bitfield-parent-optimized-out.exp | 87 + .../gdb.dwarf2/dw2-bad-mips-linkage-name.c | 4 +- .../gdb.dwarf2/dw2-bad-mips-linkage-name.exp | 18 +- .../gdb.dwarf2/dw2-lexical-block-bare.exp | 76 + gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c | 41 + gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp | 250 + gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c | 22 + gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp | 40 + gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S | 482 + gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp | 61 + gdb/testsuite/gdb.dwarf2/implref-array.c | 27 + gdb/testsuite/gdb.dwarf2/implref-array.exp | 171 + gdb/testsuite/gdb.dwarf2/implref-const.exp | 119 + gdb/testsuite/gdb.dwarf2/implref-global.c | 27 + gdb/testsuite/gdb.dwarf2/implref-global.exp | 125 + gdb/testsuite/gdb.dwarf2/implref-struct.c | 43 + gdb/testsuite/gdb.dwarf2/implref-struct.exp | 186 + gdb/testsuite/gdb.fortran/common-block.exp | 8 +- .../gdb.fortran/derived-type-function.exp | 38 + .../gdb.fortran/derived-type-function.f90 | 62 + gdb/testsuite/gdb.fortran/derived-type.exp | 52 +- gdb/testsuite/gdb.fortran/derived-type.f90 | 7 +- gdb/testsuite/gdb.fortran/library-module.exp | 2 +- gdb/testsuite/gdb.fortran/multi-dim.exp | 9 +- gdb/testsuite/gdb.fortran/nested-funcs.exp | 64 + gdb/testsuite/gdb.fortran/nested-funcs.f90 | 50 + gdb/testsuite/gdb.fortran/type.f90 | 27 +- gdb/testsuite/gdb.fortran/vla-datatypes.exp | 15 +- gdb/testsuite/gdb.fortran/vla-history.exp | 17 +- gdb/testsuite/gdb.fortran/vla-ptype-sub.exp | 37 +- gdb/testsuite/gdb.fortran/vla-ptype.exp | 24 +- gdb/testsuite/gdb.fortran/vla-type.exp | 171 + gdb/testsuite/gdb.fortran/vla-type.f90 | 104 + gdb/testsuite/gdb.fortran/whatis_type.exp | 50 +- gdb/testsuite/gdb.gdb/selftest.exp | 124 +- gdb/testsuite/gdb.gdb/unittest.exp | 17 + gdb/testsuite/gdb.linespec/ls-errs.c | 13 +- gdb/testsuite/gdb.linespec/ls-errs.exp | 386 +- gdb/testsuite/gdb.mi/mi-break.exp | 69 +- gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp | 11 +- gdb/testsuite/gdb.mi/mi-cmd-error.exp | 80 + gdb/testsuite/gdb.mi/mi-editing.exp | 37 + gdb/testsuite/gdb.mi/mi-exec-run.exp | 158 + gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc | 35 + gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp | 59 + gdb/testsuite/gdb.mi/mi-memory-changed.exp | 2 +- gdb/testsuite/gdb.mi/mi-pthreads.exp | 4 +- gdb/testsuite/gdb.mi/mi-record-changed.exp | 4 +- gdb/testsuite/gdb.mi/mi-reverse.exp | 2 +- gdb/testsuite/gdb.mi/mi-watch.exp | 85 +- gdb/testsuite/gdb.mi/new-ui-mi-sync.c | 25 + gdb/testsuite/gdb.mi/new-ui-mi-sync.exp | 114 + gdb/testsuite/gdb.mi/user-selected-context-sync.c | 63 + .../gdb.mi/user-selected-context-sync.exp | 1285 ++ gdb/testsuite/gdb.mi/vla.f90 | 1 + gdb/testsuite/gdb.multi/tids.exp | 6 + gdb/testsuite/gdb.multi/watchpoint-multi-exit.c | 66 + gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp | 87 + gdb/testsuite/gdb.opt/inline-break.exp | 2 +- gdb/testsuite/gdb.opt/inline-bt.exp | 2 +- gdb/testsuite/gdb.opt/inline-cmds.c | 2 +- gdb/testsuite/gdb.opt/inline-cmds.exp | 64 +- gdb/testsuite/gdb.opt/inline-locals.exp | 2 +- gdb/testsuite/gdb.opt/inline-markers.c | 8 +- gdb/testsuite/gdb.opt/solib-intra-step.exp | 2 +- gdb/testsuite/gdb.perf/skip-command.cc | 46 + gdb/testsuite/gdb.perf/skip-command.exp | 138 + gdb/testsuite/gdb.perf/skip-command.py | 34 + gdb/testsuite/gdb.python/py-as-string.c | 32 + gdb/testsuite/gdb.python/py-as-string.exp | 40 + .../gdb.python/py-breakpoint-create-fail.c | 28 + .../gdb.python/py-breakpoint-create-fail.exp | 56 + .../gdb.python/py-breakpoint-create-fail.py | 31 + gdb/testsuite/gdb.python/py-breakpoint.exp | 57 +- gdb/testsuite/gdb.python/py-finish-breakpoint.exp | 12 +- gdb/testsuite/gdb.python/py-frame-inline.exp | 4 + gdb/testsuite/gdb.python/py-framefilter.exp | 10 + gdb/testsuite/gdb.python/py-mi-events-gdb.py | 52 + gdb/testsuite/gdb.python/py-mi-events.c | 26 + gdb/testsuite/gdb.python/py-mi-events.exp | 87 + gdb/testsuite/gdb.python/py-mi-objfile-gdb.py | 5 +- gdb/testsuite/gdb.python/py-mi-objfile.exp | 3 +- gdb/testsuite/gdb.python/py-objfile.exp | 2 + gdb/testsuite/gdb.python/py-progspace.exp | 2 + gdb/testsuite/gdb.python/py-shared.exp | 6 +- gdb/testsuite/gdb.python/py-unwind-maint.exp | 11 +- gdb/testsuite/gdb.python/py-unwind.exp | 2 +- gdb/testsuite/gdb.python/py-value.exp | 7 + gdb/testsuite/gdb.reverse/break-reverse.exp | 2 +- gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp | 9 +- .../gdb.reverse/{aarch64.c => insn-reverse.c} | 77 +- .../gdb.reverse/{aarch64.exp => insn-reverse.exp} | 41 +- .../gdb.reverse/next-reverse-bkpt-over-sr.exp | 3 +- gdb/testsuite/gdb.reverse/solib-precsave.exp | 4 +- gdb/testsuite/gdb.reverse/solib-reverse.exp | 4 +- gdb/testsuite/gdb.reverse/step-precsave.exp | 21 +- gdb/testsuite/gdb.reverse/step-reverse.exp | 21 +- gdb/testsuite/gdb.reverse/until-precsave.exp | 2 +- gdb/testsuite/gdb.reverse/until-reverse.c | 15 +- gdb/testsuite/gdb.reverse/until-reverse.exp | 2 +- gdb/testsuite/gdb.reverse/waitpid-reverse.exp | 4 +- gdb/testsuite/gdb.rust/expr.exp | 139 + gdb/testsuite/gdb.rust/generics.exp | 45 + gdb/testsuite/gdb.rust/generics.rs | 44 + gdb/testsuite/gdb.rust/methods.exp | 63 + gdb/testsuite/gdb.rust/methods.rs | 129 + gdb/testsuite/gdb.rust/modules.exp | 89 + gdb/testsuite/gdb.rust/modules.rs | 90 + gdb/testsuite/gdb.rust/simple.exp | 222 + gdb/testsuite/gdb.rust/simple.rs | 123 + .../gdb.server/connect-with-no-symbol-file.c | 22 + .../gdb.server/connect-with-no-symbol-file.exp | 97 + gdb/testsuite/gdb.server/solib-list.exp | 39 +- gdb/testsuite/gdb.stabs/weird.exp | 3 +- gdb/testsuite/gdb.threads/attach-into-signal.exp | 2 +- .../attach-many-short-lived-threads.exp | 36 +- gdb/testsuite/gdb.threads/dlopen-libpthread.exp | 5 +- .../gdb.threads/forking-threads-plus-breakpoint.c | 14 +- .../forking-threads-plus-breakpoint.exp | 41 +- gdb/testsuite/gdb.threads/hand-call-in-threads.exp | 3 +- gdb/testsuite/gdb.threads/ia64-sigill.exp | 2 +- .../gdb.threads/interrupted-hand-call.exp | 3 +- gdb/testsuite/gdb.threads/linux-dp.exp | 2 +- gdb/testsuite/gdb.threads/manythreads.exp | 6 +- gdb/testsuite/gdb.threads/pending-step.exp | 2 +- gdb/testsuite/gdb.threads/print-threads.exp | 2 +- .../gdb.threads/process-dies-while-detaching.c | 116 + .../gdb.threads/process-dies-while-detaching.exp | 327 + gdb/testsuite/gdb.threads/sigstep-threads.exp | 2 +- gdb/testsuite/gdb.threads/staticthreads.exp | 2 +- .../gdb.threads/thread-unwindonsignal.exp | 3 +- gdb/testsuite/gdb.threads/tls-shared.exp | 2 +- gdb/testsuite/gdb.threads/tls-so_extern.exp | 2 +- gdb/testsuite/gdb.threads/tls.exp | 19 +- gdb/testsuite/gdb.threads/watchpoint-fork-child.c | 4 +- gdb/testsuite/gdb.threads/watchpoint-fork-mt.c | 7 +- gdb/testsuite/gdb.threads/watchpoint-fork-st.c | 4 +- gdb/testsuite/gdb.threads/watchpoint-fork.h | 3 + gdb/testsuite/gdb.trace/actions.c | 9 +- gdb/testsuite/gdb.trace/change-loc.exp | 26 +- gdb/testsuite/gdb.trace/entry-values.exp | 17 +- gdb/testsuite/gdb.trace/ftrace-lock.c | 1 + gdb/testsuite/gdb.trace/ftrace-lock.exp | 4 +- gdb/testsuite/gdb.trace/ftrace.exp | 205 +- .../gdb.trace/mi-trace-frame-collected.exp | 25 +- gdb/testsuite/gdb.trace/mi-trace-unavailable.exp | 21 +- gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp | 8 +- gdb/testsuite/gdb.trace/pending.exp | 9 +- gdb/testsuite/gdb.trace/range-stepping.exp | 4 +- gdb/testsuite/gdb.trace/save-trace.exp | 13 +- gdb/testsuite/gdb.trace/signal.c | 68 + gdb/testsuite/gdb.trace/signal.exp | 187 + gdb/testsuite/gdb.trace/strace.exp | 12 +- gdb/testsuite/gdb.trace/trace-break.exp | 4 +- gdb/testsuite/gdb.trace/trace-common.h | 10 +- gdb/testsuite/gdb.trace/trace-condition.c | 8 +- gdb/testsuite/gdb.trace/trace-condition.exp | 155 +- gdb/testsuite/gdb.trace/trace-enable-disable.c | 38 + gdb/testsuite/gdb.trace/trace-enable-disable.exp | 128 + gdb/testsuite/gdb.trace/trace-mt.exp | 4 +- gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c | 53 + gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp | 73 + gdb/testsuite/gdb.trace/tspeed.c | 16 +- gdb/testsuite/gdb.trace/unavailable-dwarf-piece.c | 2 + .../gdb.trace/unavailable-dwarf-piece.exp | 8 +- gdb/testsuite/gdb.trace/unavailable.exp | 6 +- gdb/testsuite/gdb.xml/extra-regs.xml | 27 +- gdb/testsuite/gdb.xml/tdesc-regs.exp | 23 +- gdb/testsuite/lib/ada.exp | 7 +- gdb/testsuite/lib/compiler.c | 12 + gdb/testsuite/lib/compiler.cc | 12 + gdb/testsuite/lib/dwarf.exp | 2 +- gdb/testsuite/lib/fortran.exp | 60 + gdb/testsuite/lib/future.exp | 91 +- gdb/testsuite/lib/gdb.exp | 230 +- gdb/testsuite/lib/gdbserver-support.exp | 30 +- gdb/testsuite/lib/mi-support.exp | 169 +- gdb/testsuite/lib/opencl.exp | 2 +- gdb/testsuite/lib/rust-support.exp | 37 + gdb/testsuite/lib/selftest-support.exp | 5 + gdb/testsuite/lib/trace-support.exp | 8 + gdb/thread-fsm.c | 12 +- gdb/thread-fsm.h | 23 +- gdb/thread.c | 94 +- gdb/tic6x-tdep.c | 3 - gdb/tilegx-linux-tdep.c | 1 - gdb/tilegx-tdep.c | 7 +- gdb/top.c | 693 +- gdb/top.h | 188 +- gdb/tracefile-tfile.c | 109 +- gdb/tracefile.c | 71 +- gdb/tracefile.h | 3 + gdb/tracepoint.c | 18 +- gdb/tui/tui-hooks.c | 24 - gdb/tui/tui-interp.c | 208 +- gdb/tui/tui-io.c | 18 +- gdb/tui/tui-stack.c | 2 +- gdb/tui/tui-winsource.c | 6 +- gdb/tui/tui.c | 6 +- gdb/typeprint.c | 2 +- gdb/ui-file.c | 12 +- gdb/ui-file.h | 4 +- gdb/ui-out.c | 202 +- gdb/ui-out.h | 7 +- gdb/utils.c | 205 +- gdb/utils.h | 23 +- gdb/v850-tdep.c | 2 +- gdb/valarith.c | 12 +- gdb/valops.c | 104 +- gdb/valprint.c | 236 +- gdb/valprint.h | 12 +- gdb/value.c | 236 +- gdb/value.h | 112 +- gdb/varobj.c | 4 +- gdb/version.in | 2 +- gdb/warning.m4 | 2 +- gdb/windows-nat.c | 40 +- gdb/windows-tdep.c | 5 +- gdb/x86-linux-nat.c | 8 +- gdb/x86bsd-nat.c | 156 + gdb/{amd64bsd-nat.h => x86bsd-nat.h} | 25 +- gdb/xcoffread.c | 2 - gdb/xml-syscall.c | 234 +- gdb/xml-syscall.h | 16 + gdb/xml-tdesc.c | 288 +- gdb/xml-tdesc.h | 6 + gdb/xtensa-linux-nat.c | 2 +- gdb/xtensa-tdep.c | 10 +- gdb/xtensa-tdep.h | 98 +- gdb/yy-remap.h | 92 + include/ChangeLog | 407 + include/bfdlink.h | 82 +- include/coff/sparc.h | 8 + include/dis-asm.h | 1 + include/dwarf2.h | 6 +- include/elf/arc-reloc.def | 113 +- include/elf/arc.h | 11 +- include/elf/arm.h | 28 +- include/elf/common.h | 10 + include/elf/dlx.h | 8 + include/elf/mips.h | 14 +- include/elf/ppc.h | 13 + include/elf/sh.h | 8 + include/elf/xtensa.h | 10 + include/gdb/ChangeLog | 4 + include/gdb/signals.def | 4 +- include/libiberty.h | 11 + include/opcode/aarch64.h | 20 +- include/opcode/arc-func.h | 15 + include/opcode/arc.h | 390 +- include/opcode/arm.h | 24 +- include/opcode/d10v.h | 8 + include/opcode/d30v.h | 8 + include/opcode/dlx.h | 4 +- include/opcode/h8300.h | 2 +- include/opcode/hppa.h | 2 +- include/opcode/i960.h | 2 +- include/opcode/ia64.h | 7 + include/opcode/metag.h | 8 + include/opcode/mips.h | 9 + include/opcode/msp430-decode.h | 9 +- include/opcode/msp430.h | 2 +- include/opcode/ppc.h | 8 + include/opcode/sparc.h | 18 +- include/opcode/spu.h | 2 +- include/opcode/tic30.h | 8 +- include/opcode/tic4x.h | 10 +- include/opcode/tic54x.h | 8 +- include/opcode/tic6x.h | 8 + include/opcode/tilegx.h | 4 +- include/opcode/v850.h | 8 + include/opcode/visium.h | 6 +- include/plugin-api.h | 27 +- libiberty/ChangeLog | 96 + libiberty/configure | 3 +- libiberty/cp-demangle.c | 213 +- libiberty/cplus-dem.c | 45 +- libiberty/make-relative-prefix.c | 11 +- libiberty/testsuite/demangle-expected | 166 + libiberty/xmemdup.c | 6 +- md5.sum | 2318 +- opcodes/ChangeLog | 863 + opcodes/Makefile.in | 70 +- opcodes/aarch64-dis.c | 13 +- opcodes/aarch64-gen.c | 1 + opcodes/aarch64-opc.c | 50 +- opcodes/aarch64-tbl.h | 2527 ++- opcodes/aclocal.m4 | 74 +- opcodes/alpha-dis.c | 4 +- opcodes/arc-dis.c | 1183 +- opcodes/arc-ext-tbl.h | 122 + opcodes/arc-ext.c | 372 +- opcodes/arc-ext.h | 59 +- opcodes/arc-nps400-tbl.h | 650 + opcodes/arc-opc.c | 1359 +- opcodes/arc-regs.h | 744 +- opcodes/arc-tbl.h | 1624 +- opcodes/arm-dis.c | 288 +- opcodes/avr-dis.c | 14 +- opcodes/cgen-opc.c | 3 +- opcodes/configure | 71 +- opcodes/crx-dis.c | 4 +- opcodes/disassemble.c | 9 +- opcodes/epiphany-opc.c | 14 +- opcodes/fr30-ibld.c | 2 +- opcodes/fr30-opc.c | 14 +- opcodes/frv-opc.c | 14 +- opcodes/ft32-opc.c | 4 +- opcodes/i386-dis.c | 45 +- opcodes/i386-gen.c | 246 +- opcodes/i386-init.h | 531 +- opcodes/i386-opc.h | 30 +- opcodes/i386-opc.tbl | 128 +- opcodes/i386-tbl.h | 20996 +++++++++---------- opcodes/ip2k-opc.c | 14 +- opcodes/iq2000-opc.c | 14 +- opcodes/lm32-opc.c | 14 +- opcodes/lm32-opinst.c | 3 +- opcodes/m32c-opc.c | 14 +- opcodes/m32r-opc.c | 14 +- opcodes/m32r-opinst.c | 3 +- opcodes/mcore-dis.c | 15 +- opcodes/mcore-opc.h | 3 +- opcodes/mep-opc.c | 14 +- opcodes/microblaze-opc.h | 2 +- opcodes/micromips-opc.c | 22 +- opcodes/mips-dis.c | 48 +- opcodes/mips-opc.c | 4 +- opcodes/msp430-dis.c | 666 +- opcodes/mt-opc.c | 14 +- opcodes/nds32-asm.h | 8 + opcodes/nds32-dis.c | 57 +- opcodes/or1k-desc.h | 6 +- opcodes/or1k-opc.c | 14 +- opcodes/or1k-opinst.c | 3 +- opcodes/ppc-dis.c | 71 +- opcodes/ppc-opc.c | 7326 +++---- opcodes/rl78-decode.c | 4 +- opcodes/rl78-dis.c | 3 +- opcodes/s390-dis.c | 55 +- opcodes/sh-opc.h | 12 +- opcodes/sparc-dis.c | 30 +- opcodes/sparc-opc.c | 611 +- opcodes/tic4x-dis.c | 8 +- opcodes/tic54x-dis.c | 2 +- opcodes/tic54x-opc.c | 12 +- opcodes/tic80-opc.c | 11 +- opcodes/v850-opc.c | 4 +- opcodes/xc16x-opc.c | 14 +- opcodes/xstormy16-opc.c | 14 +- sim/ChangeLog | 7 + sim/aarch64/ChangeLog | 165 + sim/aarch64/cpustate.c | 381 +- sim/aarch64/cpustate.h | 53 +- sim/aarch64/decode.h | 44 - sim/aarch64/memory.c | 77 +- sim/aarch64/memory.h | 6 - sim/aarch64/sim-main.h | 6 +- sim/aarch64/simulator.c | 4732 +++-- sim/arm/ChangeLog | 6 + sim/arm/armemu.c | 6 +- sim/arm/armos.c | 5 +- sim/avr/interp.c | 3 +- sim/bfin/ChangeLog | 9 + sim/bfin/arch.h | 44 + sim/bfin/machs.h | 20 - sim/bfin/sim-main.h | 8 +- sim/rl78/ChangeLog | 5 + sim/rl78/load.c | 5 +- sim/rx/ChangeLog | 11 + sim/rx/fpu.c | 2 +- sim/rx/load.c | 5 +- sim/sh/ChangeLog | 11 + sim/sh/gencode.c | 4 +- sim/sh/interp.c | 52 +- zlib/configure | 2 +- 1251 files changed, 129518 insertions(+), 60956 deletions(-) create mode 100644 bfd/arc-got.h create mode 100644 bfd/elf32-dlx.h create mode 100644 bfd/po/sr.gmo create mode 100644 bfd/po/sr.po create mode 100644 gdb/cli/cli-interp.h create mode 100644 gdb/common/signals-state-save-restore.c create mode 100644 gdb/common/signals-state-save-restore.h create mode 100644 gdb/features/i386/amd64-avx-mpx-linux.c create mode 100644 gdb/features/i386/amd64-avx-mpx-linux.xml create mode 100644 gdb/features/i386/amd64-avx-mpx.c create mode 100644 gdb/features/i386/amd64-avx-mpx.xml create mode 100644 gdb/features/i386/i386-avx-mpx-linux.c create mode 100644 gdb/features/i386/i386-avx-mpx-linux.xml create mode 100644 gdb/features/i386/i386-avx-mpx.c create mode 100644 gdb/features/i386/i386-avx-mpx.xml create mode 100644 gdb/features/nds32-core.xml create mode 100644 gdb/features/nds32-fpu.xml create mode 100644 gdb/features/nds32-system.xml create mode 100644 gdb/features/nds32.c create mode 100644 gdb/features/nds32.xml create mode 100644 gdb/gdbserver/linux-ppc-ipa.c create mode 100644 gdb/gdbserver/linux-ppc-tdesc.h create mode 100644 gdb/gdbserver/linux-s390-ipa.c create mode 100644 gdb/gdbserver/linux-s390-tdesc.h create mode 100644 gdb/gdbserver/linux-x86-tdesc.h create mode 100644 gdb/nds32-tdep.c create mode 100644 gdb/nds32-tdep.h create mode 100644 gdb/python/lib/gdb/function/as_string.py create mode 100644 gdb/record-btrace.h create mode 100644 gdb/regformats/i386/amd64-avx-mpx-linux.dat create mode 100644 gdb/regformats/i386/amd64-avx-mpx.dat create mode 100644 gdb/regformats/i386/i386-avx-mpx-linux.dat create mode 100644 gdb/regformats/i386/i386-avx-mpx.dat delete mode 100644 gdb/remote-m32r-sdi.c delete mode 100644 gdb/remote-mips.c create mode 100644 gdb/rust-exp.c create mode 100644 gdb/rust-exp.y create mode 100644 gdb/rust-lang.c create mode 100644 gdb/rust-lang.h create mode 100644 gdb/selftest.c create mode 100644 gdb/selftest.h create mode 100644 gdb/ser-event.c create mode 100644 gdb/ser-event.h create mode 100644 gdb/syscalls/aarch64-linux.xml.in create mode 100644 gdb/syscalls/amd64-linux.xml.in create mode 100644 gdb/syscalls/apply-defaults.xsl create mode 100644 gdb/syscalls/arm-linux.xml.in rename gdb/syscalls/{bfin-linux.xml => bfin-linux.xml.in} (100%) create mode 100644 gdb/syscalls/freebsd.xml create mode 100644 gdb/syscalls/i386-linux.xml.in create mode 100644 gdb/syscalls/linux-defaults.xml.in create mode 100644 gdb/syscalls/mips-n32-linux.xml.in create mode 100644 gdb/syscalls/mips-n64-linux.xml.in create mode 100644 gdb/syscalls/mips-o32-linux.xml.in create mode 100644 gdb/syscalls/ppc-linux.xml.in create mode 100644 gdb/syscalls/ppc64-linux.xml.in create mode 100644 gdb/syscalls/s390-linux.xml.in create mode 100644 gdb/syscalls/s390x-linux.xml.in create mode 100644 gdb/syscalls/sparc-linux.xml.in create mode 100644 gdb/syscalls/sparc64-linux.xml.in create mode 100755 gdb/testsuite/analyze-racy-logs.py create mode 100644 gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.c create mode 100644 gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.exp create mode 100644 gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c create mode 100644 gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp create mode 100644 gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c create mode 100644 gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp create mode 100644 gdb/testsuite/gdb.arch/mips-fcr.c create mode 100644 gdb/testsuite/gdb.arch/mips-fcr.exp create mode 100644 gdb/testsuite/gdb.arch/s390-stackless.S create mode 100644 gdb/testsuite/gdb.arch/s390-stackless.exp create mode 100644 gdb/testsuite/gdb.base/bad-file.exp create mode 100644 gdb/testsuite/gdb.base/branch-to-self.c create mode 100644 gdb/testsuite/gdb.base/branch-to-self.exp delete mode 100644 gdb/testsuite/gdb.base/branches.c create mode 100644 gdb/testsuite/gdb.base/command-line-input.exp delete mode 100644 gdb/testsuite/gdb.base/disp-step-syscall.exp create mode 100644 gdb/testsuite/gdb.base/examine-backward.c create mode 100644 gdb/testsuite/gdb.base/examine-backward.exp create mode 100644 gdb/testsuite/gdb.base/infcall-input.c create mode 100644 gdb/testsuite/gdb.base/infcall-input.exp create mode 100644 gdb/testsuite/gdb.base/jit-attach-pie.c create mode 100644 gdb/testsuite/gdb.base/jit-attach-pie.exp create mode 100644 gdb/testsuite/gdb.base/jit-protocol.h create mode 100644 gdb/testsuite/gdb.base/jit-reader.exp create mode 100644 gdb/testsuite/gdb.base/jit-simple-dl.c create mode 100644 gdb/testsuite/gdb.base/jit-simple-jit.c create mode 100644 gdb/testsuite/gdb.base/jithost.c create mode 100644 gdb/testsuite/gdb.base/jithost.h create mode 100644 gdb/testsuite/gdb.base/jitreader.c create mode 100644 gdb/testsuite/gdb.base/new-ui-echo.c create mode 100644 gdb/testsuite/gdb.base/new-ui-echo.exp create mode 100644 gdb/testsuite/gdb.base/new-ui-pending-input.c create mode 100644 gdb/testsuite/gdb.base/new-ui-pending-input.exp create mode 100644 gdb/testsuite/gdb.base/new-ui.c create mode 100644 gdb/testsuite/gdb.base/new-ui.exp create mode 100644 gdb/testsuite/gdb.base/offsets.c create mode 100644 gdb/testsuite/gdb.base/offsets.exp create mode 100644 gdb/testsuite/gdb.base/set-inferior-tty.c create mode 100644 gdb/testsuite/gdb.base/set-inferior-tty.exp create mode 100644 gdb/testsuite/gdb.base/signals-state-child.c create mode 100644 gdb/testsuite/gdb.base/signals-state-child.exp create mode 100644 gdb/testsuite/gdb.base/step-over-clone.c create mode 100644 gdb/testsuite/gdb.base/step-over-exit.c create mode 100644 gdb/testsuite/gdb.base/step-over-exit.exp rename gdb/testsuite/gdb.base/{disp-step-fork.c => step-over-fork.c} (100%) create mode 100644 gdb/testsuite/gdb.base/step-over-syscall.exp rename gdb/testsuite/gdb.base/{disp-step-vfork.c => step-over-vfork.c} (100%) create mode 100644 gdb/testsuite/gdb.btrace/reconnect.c create mode 100644 gdb/testsuite/gdb.btrace/reconnect.exp create mode 100644 gdb/testsuite/gdb.cp/scope-err.cc create mode 100644 gdb/testsuite/gdb.cp/scope-err.exp create mode 100644 gdb/testsuite/gdb.dlang/circular.c create mode 100644 gdb/testsuite/gdb.dlang/circular.exp create mode 100644 gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp create mode 100644 gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c create mode 100644 gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp create mode 100644 gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S create mode 100644 gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp create mode 100644 gdb/testsuite/gdb.dwarf2/implref-array.c create mode 100644 gdb/testsuite/gdb.dwarf2/implref-array.exp create mode 100644 gdb/testsuite/gdb.dwarf2/implref-const.exp create mode 100644 gdb/testsuite/gdb.dwarf2/implref-global.c create mode 100644 gdb/testsuite/gdb.dwarf2/implref-global.exp create mode 100644 gdb/testsuite/gdb.dwarf2/implref-struct.c create mode 100644 gdb/testsuite/gdb.dwarf2/implref-struct.exp create mode 100644 gdb/testsuite/gdb.fortran/derived-type-function.exp create mode 100644 gdb/testsuite/gdb.fortran/derived-type-function.f90 create mode 100755 gdb/testsuite/gdb.fortran/nested-funcs.exp create mode 100755 gdb/testsuite/gdb.fortran/nested-funcs.f90 create mode 100755 gdb/testsuite/gdb.fortran/vla-type.exp create mode 100755 gdb/testsuite/gdb.fortran/vla-type.f90 create mode 100644 gdb/testsuite/gdb.gdb/unittest.exp create mode 100644 gdb/testsuite/gdb.mi/mi-cmd-error.exp create mode 100644 gdb/testsuite/gdb.mi/mi-editing.exp create mode 100644 gdb/testsuite/gdb.mi/mi-exec-run.exp create mode 100644 gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc create mode 100644 gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp create mode 100644 gdb/testsuite/gdb.mi/new-ui-mi-sync.c create mode 100644 gdb/testsuite/gdb.mi/new-ui-mi-sync.exp create mode 100644 gdb/testsuite/gdb.mi/user-selected-context-sync.c create mode 100644 gdb/testsuite/gdb.mi/user-selected-context-sync.exp create mode 100644 gdb/testsuite/gdb.multi/watchpoint-multi-exit.c create mode 100644 gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp create mode 100644 gdb/testsuite/gdb.perf/skip-command.cc create mode 100644 gdb/testsuite/gdb.perf/skip-command.exp create mode 100644 gdb/testsuite/gdb.perf/skip-command.py create mode 100644 gdb/testsuite/gdb.python/py-as-string.c create mode 100644 gdb/testsuite/gdb.python/py-as-string.exp create mode 100644 gdb/testsuite/gdb.python/py-breakpoint-create-fail.c create mode 100644 gdb/testsuite/gdb.python/py-breakpoint-create-fail.exp create mode 100644 gdb/testsuite/gdb.python/py-breakpoint-create-fail.py create mode 100644 gdb/testsuite/gdb.python/py-mi-events-gdb.py create mode 100644 gdb/testsuite/gdb.python/py-mi-events.c create mode 100644 gdb/testsuite/gdb.python/py-mi-events.exp rename gdb/testsuite/gdb.reverse/{aarch64.c => insn-reverse.c} (58%) rename gdb/testsuite/gdb.reverse/{aarch64.exp => insn-reverse.exp} (84%) create mode 100644 gdb/testsuite/gdb.rust/expr.exp create mode 100644 gdb/testsuite/gdb.rust/generics.exp create mode 100644 gdb/testsuite/gdb.rust/generics.rs create mode 100644 gdb/testsuite/gdb.rust/methods.exp create mode 100644 gdb/testsuite/gdb.rust/methods.rs create mode 100644 gdb/testsuite/gdb.rust/modules.exp create mode 100644 gdb/testsuite/gdb.rust/modules.rs create mode 100644 gdb/testsuite/gdb.rust/simple.exp create mode 100644 gdb/testsuite/gdb.rust/simple.rs create mode 100644 gdb/testsuite/gdb.server/connect-with-no-symbol-file.c create mode 100644 gdb/testsuite/gdb.server/connect-with-no-symbol-file.exp create mode 100644 gdb/testsuite/gdb.threads/process-dies-while-detaching.c create mode 100644 gdb/testsuite/gdb.threads/process-dies-while-detaching.exp create mode 100644 gdb/testsuite/gdb.trace/signal.c create mode 100644 gdb/testsuite/gdb.trace/signal.exp create mode 100644 gdb/testsuite/gdb.trace/trace-enable-disable.c create mode 100644 gdb/testsuite/gdb.trace/trace-enable-disable.exp create mode 100644 gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c create mode 100644 gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp mode change 100644 => 100755 gdb/testsuite/lib/compiler.c mode change 100644 => 100755 gdb/testsuite/lib/compiler.cc create mode 100644 gdb/testsuite/lib/rust-support.exp create mode 100644 gdb/x86bsd-nat.c rename gdb/{amd64bsd-nat.h => x86bsd-nat.h} (58%) create mode 100644 gdb/yy-remap.h create mode 100644 opcodes/arc-ext-tbl.h create mode 100644 opcodes/arc-nps400-tbl.h create mode 100644 sim/bfin/arch.h diff --git a/ChangeLog b/ChangeLog index fb76695..0453d97 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,76 @@ +2016-07-20 Yan-Ting Lin + + * configure.ac (nds32*-*-*): Remove entry to enable gdb. + * configure: Regenerated. + +2016-06-28 Walter Lee + + * configure.ac (tilepro-*-*): Add gdb to noconfigdirs. + * configure: Regenerate. + +2016-05-28 Alan Modra + + * Makefile.tpl (configure): Depend on m4 files included. + * Makefile.in: Regenerate. + +2016-05-27 Nick Clifton + + * config.guess (Alpha OSF1): Fix typo introduced during the most + recent synchronization update. + +2016-05-23 Nick Clifton + + * Import these patches from the gcc mainline: + + 2016-05-16 Jakub Sejdak + + * config.guess: Import version 2016-04-02 (newest). + * config.sub: Import version 2016-05-10 (newest). + +2016-04-19 Nick Clifton + + * Import this patch from the GCC mainline: + + 2016-04-13 Segher Boessenkool + + PR bootstrap/70173 + * Makefile.tpl (local-distclean): Delete the libcc1, gnattools, + and gotools directories. Delete the stage_final file. + * Makefile.in: Regenerate. + +2016-03-17 Cary Coutant + + * configure.ac: Add mips and s390 to the gold target check. + * configure: Regenerate. + +2016-02-10 Nick Clifton + + Import these patches from the GCC mainline: + + 2016-01-12 Andris Pavenis + + * configure.ac: Enable LTO for DJGPP + * configure: Regenerate + + 2016-01-24 Mikhail Maltsev + + PR bootstrap/69329 + * Makefile.tpl (BASE_FLAGS_TO_PASS): Add LSAN_OPTIONS. + * Makefile.in: Regenerate. + + 2016-01-25 Aditya Kumar + Sebastian Pop + + * Makefile.in: Regenerate. + * Makefile.tpl: Export ISLVER. + * configure: Regenerate. + * config/isl.m4: Detect isl-0.15. + + 2016-01-29 Sebastian Pop + + * config/isl.m4: Add comments about isl-0.16. + * configure: Regenerate. + 2016-01-12 H.J. Lu Sync with GCC diff --git a/Makefile.in b/Makefile.in index 2733c4d..cb0136e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,7 +3,8 @@ # # 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, 2007, 2008, 2009, 2010, 2011 +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012, 2013, 2014, 2015, 2016 # Free Software Foundation # # This file is free software; you can redistribute it and/or modify @@ -222,6 +223,7 @@ HOST_EXPORTS = \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ + ISLVER="$(HOST_ISLVER)"; export ISLVER; \ LIBELFLIBS="$(HOST_LIBELFLIBS)"; export LIBELFLIBS; \ LIBELFINC="$(HOST_LIBELFINC)"; export LIBELFINC; \ XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \ @@ -315,6 +317,7 @@ HOST_GMPINC = @gmpinc@ # Where to find isl HOST_ISLLIBS = @isllibs@ HOST_ISLINC = @islinc@ +HOST_ISLVER = @islver@ # Where to find libelf HOST_LIBELFLIBS = @libelflibs@ @@ -789,7 +792,8 @@ BASE_FLAGS_TO_PASS = \ $(CXX_FOR_TARGET_FLAG_TO_PASS) \ "TFLAGS=$(TFLAGS)" \ "CONFIG_SHELL=$(SHELL)" \ - "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + $(if $(LSAN_OPTIONS),"LSAN_OPTIONS=$(LSAN_OPTIONS)") # We leave this in just in case, but it is not needed anymore. RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) @@ -2313,7 +2317,7 @@ local-clean: local-distclean: -rm -f Makefile config.status config.cache mh-frag mt-frag - -rm -f maybedep.tmp serdep.tmp + -rm -f maybedep.tmp serdep.tmp stage_final -if [ "$(TARGET_SUBDIR)" != "." ]; then \ rm -rf $(TARGET_SUBDIR); \ else true; fi @@ -2325,7 +2329,8 @@ local-distclean: -rm -f texinfo/doc/Makefile texinfo/po/POTFILES -rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null -rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null - -rmdir fastjar gcc libiberty texinfo zlib 2>/dev/null + -rmdir fastjar gcc gnattools gotools libcc1 libiberty 2>/dev/null + -rmdir texinfo zlib 2>/dev/null -find . -name config.cache -exec rm -f {} \; \; 2>/dev/null local-maintainer-clean: @@ -51087,7 +51092,10 @@ config.status: configure # Rebuilding configure. AUTOCONF = autoconf $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \ - $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 + $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 \ + $(srcdir)/config/elf.m4 $(srcdir)/config/isl.m4 \ + $(srcdir)/libtool.m4 $(srcdir)/ltoptions.m4 $(srcdir)/ltsugar.m4 \ + $(srcdir)/ltversion.m4 $(srcdir)/lt~obsolete.m4 cd $(srcdir) && $(AUTOCONF) # ------------------------------ diff --git a/Makefile.tpl b/Makefile.tpl index f7bb77e..19728d2 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -6,7 +6,8 @@ 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, 2007, 2008, 2009, 2010, 2011 +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012, 2013, 2014, 2015, 2016 # Free Software Foundation # # This file is free software; you can redistribute it and/or modify @@ -225,6 +226,7 @@ HOST_EXPORTS = \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ + ISLVER="$(HOST_ISLVER)"; export ISLVER; \ LIBELFLIBS="$(HOST_LIBELFLIBS)"; export LIBELFLIBS; \ LIBELFINC="$(HOST_LIBELFINC)"; export LIBELFINC; \ XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \ @@ -318,6 +320,7 @@ HOST_GMPINC = @gmpinc@ # Where to find isl HOST_ISLLIBS = @isllibs@ HOST_ISLINC = @islinc@ +HOST_ISLVER = @islver@ # Where to find libelf HOST_LIBELFLIBS = @libelflibs@ @@ -590,7 +593,8 @@ BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass +][+ IF optional +] \ $(CXX_FOR_TARGET_FLAG_TO_PASS) \ "TFLAGS=$(TFLAGS)" \ "CONFIG_SHELL=$(SHELL)" \ - "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + $(if $(LSAN_OPTIONS),"LSAN_OPTIONS=$(LSAN_OPTIONS)") # We leave this in just in case, but it is not needed anymore. RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) @@ -807,7 +811,7 @@ local-clean: local-distclean: -rm -f Makefile config.status config.cache mh-frag mt-frag - -rm -f maybedep.tmp serdep.tmp + -rm -f maybedep.tmp serdep.tmp stage_final -if [ "$(TARGET_SUBDIR)" != "." ]; then \ rm -rf $(TARGET_SUBDIR); \ else true; fi @@ -819,7 +823,8 @@ local-distclean: -rm -f texinfo/doc/Makefile texinfo/po/POTFILES -rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null -rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null - -rmdir fastjar gcc libiberty texinfo zlib 2>/dev/null + -rmdir fastjar gcc gnattools gotools libcc1 libiberty 2>/dev/null + -rmdir texinfo zlib 2>/dev/null -find . -name config.cache -exec rm -f {} \; \; 2>/dev/null local-maintainer-clean: @@ -1927,7 +1932,10 @@ config.status: configure # Rebuilding configure. AUTOCONF = autoconf $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \ - $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 + $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 \ + $(srcdir)/config/elf.m4 $(srcdir)/config/isl.m4 \ + $(srcdir)/libtool.m4 $(srcdir)/ltoptions.m4 $(srcdir)/ltsugar.m4 \ + $(srcdir)/ltversion.m4 $(srcdir)/lt~obsolete.m4 cd $(srcdir) && $(AUTOCONF) # ------------------------------ diff --git a/bfd/ChangeLog b/bfd/ChangeLog index dc8b293..b09c5d5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,7 +1,2079 @@ -2016-02-10 Joel Brobecker +2016-08-01 Joel Brobecker * development.sh (development): Set to false. +2016-08-01 Nick Clifton + + * po/sv.po: Updated Swedish translation. + +2016-07-27 Ozkan Sezer + Nick Clifton + + PR ld/20401 + * coffgen.c (fini_reloc_cookie_rels): Check for the extistence + of the coff_section_data before using it. + +2016-07-26 Maciej W. Rozycki + + * elfxx-mips.c (mips_elf_calculate_relocation): Handle branches + in PLT compression selection. + (_bfd_mips_elf_check_relocs): Likewise. + +2016-07-22 Cupertino Miranda + + * arc-got.h (relocate_fix_got_relocs_for_got_info): Handle the + case where there's no elf_link_hash_entry while processing + GOT_NORMAL got entries. + +2016-07-21 H.J. Lu + + * version.m4 (BFD_VERSION): Set to 2.27.51. + * configure: Regenerated. + +2016-07-21 Nick Clifton + + * elf.c (_bfd_elf_filter_global_symbols): Skip local symbols. + (swap_out_syms): Return an error when not finding ELF output + section rather than asserting. + +2016-07-21 Thomas Preud'homme + + * elflink.c (elf_output_implib): Call bfd_set_error on no symbols. + +2016-07-20 John Baldwin + + * elf.c (elfcore_grok_freebsd_psinfo): Check for minimum note size + and handle pr_pid if present. + +2016-07-20 H.J. Lu + + PR ld/20376 + * elf.c (assign_file_positions_for_load_sections): Also check + p_paddr for program header space. + +2016-07-20 Alan Modra + + * elf64-ppc.c (ppc64_elf_howto_raw ): Put + ppc64_elf_unhandled_reloc for special_function. + * elf32-ppc.c (ppc_elf_howto_raw): Similarly for lots of relocs. + +2016-07-19 Maciej W. Rozycki + + * elfxx-mips.c (mips_elf_perform_relocation): Convert cross-mode + BAL to JALX. + (_bfd_mips_elf_relocate_section) : Add a + corresponding error message. + +2016-07-19 Maciej W. Rozycki + + * elfxx-mips.c (b_reloc_p): Add R_MICROMIPS_PC16_S1, + R_MICROMIPS_PC10_S1 and R_MICROMIPS_PC7_S1. + (branch_reloc_p): New function. + (mips_elf_calculate_relocation): Handle ISA mode determination + for relocations against section symbols, against absolute + symbols and absolute relocations. Also set `*cross_mode_jump_p' + for branches. + : Suppress alignment + checks for weak undefined symbols. Also check target alignment + within the same ISA mode. + : Handle cross-mode branches + in the alignment check. + : Add an alignment check. + : Likewise. + : Likewise. + (mips_elf_perform_relocation): Report a failure for unsupported + same-mode JALX instructions and cross-mode branches. + (_bfd_mips_elf_relocate_section) : Add + error messages for jumps to misaligned addresses. + +2016-07-16 Alan Modra + + * elflink.c: Include plugin-api.h. + * plugin.c (bfd_plugin_open_input): New function, extracted from.. + (try_claim): ..here. + * plugin.h: Don't include bfd.h. + (bfd_plugin_open_input): Declare. + +2016-07-16 Alan Modra + + * targets.c (bfd_seach_for_target): Rename to.. + (bfd_iterate_over_targets): ..this. Rewrite doc. + * bfd-in2.h: Regenerate. + +2016-07-16 Alan Modra + + * archures.c (bfd_default_set_arch_mach): Make available in bfd.h. + * libbfd.h: Regenerate. + * bfd-in2.h: Regenerate. + +2016-07-16 Alan Modra + + * libbfd-in.h (BFD_ALIGN): Move to.. + * bfd-in.h: ..here. + * elf32-ppc.h (struct ppc_elf_params): Add pagesize. + * elf32-ppc.c (default_params): Adjust init. + (ppc_elf_link_params): Set pagesize_p2. + * libbfd.h: Regenerate. + * bfd-in2.h: Regenerate. + +2016-07-15 Thomas Preud'homme + + * elf-bfd.h (elf_backend_filter_implib_symbols): Declare backend hook. + (_bfd_elf_filter_global_symbols): Declare. + * elf.c (_bfd_elf_filter_global_symbols): New function. + * elflink.c (elf_filter_global_symbols): Likewise. + (elf_output_implib): Likewise. + (bfd_elf_final_link): Call above function, failing if it does. + * elfxx-target.h (elf_backend_filter_implib_symbols): Define macro and + default it to NULL. + (elf_backend_copy_indirect_symbol): Fix spacing. + (elf_backend_hide_symbol): Likewise. + (elfNN_bed): Initialize elf_backend_filter_implib_symbols backend hook. + +2016-07-15 Andrew Burgess + Nick Clifton + + * elf32-arc.c (PR_DEBUG): Delete. + Fix printing of debug information. Fix formatting of debug + statements. + (debug_arc_reloc): Handle symbols that are not from an input file. + (arc_do_relocation): Remove excessive exclamation points. + + * arc-got.h: Fix formatting. Fix printing of debug information. + (new_got_entry_to_list): Use xmalloc. + * config.bfd: use the big-endian arc vector as the default vector + for big-endian arc targets. + +2016-07-15 Alan Modra + + * cofflink.c (mark_relocs): Exclude relocs with -1 r_symndx + from marking sym_indices. + +2016-07-14 Maciej W. Rozycki + + * reloc.c (bfd_perform_relocation): Try the `howto' handler + first with relocations against absolute symbols. + (bfd_install_relocation): Likewise. + +2016-07-12 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Align + .got/.got.plt sections to 8 bytes. + +2016-07-12 Nick Clifton + + * binary.c (binary_set_section_contents): Second grammar fix. + +2016-07-12 Douglas B Rupp + + * binary.c (binary_set_section_contents): Fix grammar in warning + message. + +2016-07-11 Cupertino Miranda + + * elf32-arc.c: made PR_DEBUG always defined. + +2016-07-11 Cupertino Miranda + + * arc-got.h: Moved got related structures from elf32-arc.c to + this file. More precisely, tls_type_e, tls_got_entries, got_entry. + * (arc_get_local_got_ents, got_entry_for_type, new_got_entry_to_list, + tls_type_for_reloc, symbol_has_entry_of_type, + get_got_entry_list_for_symbol, arc_got_entry_type_for_reloc, + ADD_SYMBOL_REF_SEC_AND_RELOC, rc_fill_got_info_for_reloc, + relocate_fix_got_relocs_for_got_info, + create_got_dynrelocs_for_single_entry, + create_got_dynrelocs_for_got_info): Added to file. + * elf32-arc.c: Removed GOT & TLS related structs and functions to + arc-got.h. + +2016-07-08 James Bowman + + * elf32-ft32.c (ft32_reloc_map): Use R_FT32_32 for BFD_RELOC_32. + +2016-07-05 Andre Vieria + + * elf32-arm.c (THUMB32_MOVT): New veneer macro. + (THUMB32_MOVW): Likewise. + (elf32_arm_stub_long_branch_thumb2_only_pure): New. + (DEF_STUBS): Define long_branch_thumb2_only_pure. + (arm_stub_is_thumb): Add new veneer stub. + (arm_type_of_stub): Use new veneer. + (arm_stub_required_alignment): Add new veneer. + +2016-07-05 Andre Vieria + + * bfd-in2.h (SEC_ELF_NOREAD): Rename to ... + (SEC_ELF_PURECODE): ... this. + * elf32-arm.c (elf32_arm_post_process_headers): Rename SEC_ELF_NOREAD + to SEC_ELF_NOREAD. + (elf32_arm_fake_sections): Likewise. + (elf_32_arm_section_flags): Likewise. + (elf_32_arm_lookup_section_flags): Likewise. + * section.c (SEC_ELF_NOREAD): Rename to ... + (SEC_ELF_PURECODE): ... this. + +2016-07-01 Thomas Preud'homme + + * elf32-arm.c (using_thumb2_bl): New function. + (arm_type_of_stub): Declare thumb2 variable together and change type + to bfd_boolean. Use using_thumb2_bl () to determine whether + THM_MAX_FWD_BRANCH_OFFSET or THM2_MAX_FWD_BRANCH_OFFSET should be + checked for BL range. + (elf32_arm_final_link_relocate): Use using_thumb2_bl () to determine + the bit size of BL offset. + +2016-06-29 Nick Clifton + + * elfnn-aarch64.c (is_aarch64_mapping_symbol): New function. + Returns TRUE for AArch64 mapping symbols. + (elfNN_aarch64_backend_symbol_processing): New function. Marks + mapping symbols as precious in object files so that they will not + be stripped. + (elf_backend_symbol_processing): Define. + + * elf32-arm.c (is_arm_mapping_symbol): New function. Returns TRUE + for ARM mapping symbols. + (elf32_arm_backend_symbol_processing): Make use of the new function. + +2016-06-28 H.J. Lu + + PR ld/20306 + * elflink.c (elf_link_check_versioned_symbol): Return false + for unreferenced undefined symbol. + +2016-06-28 Nick Clifton + + * elf32-bfin.c (bfin_adjust_dynamic_symbol): Fail if a COPY reloc + is needed. + + * elf32-arm.c (elf32_arm_backend_symbol_processing): New + function. Marks mapping symbols in object files as precious, so + that strip will not remove them. + (elf_backend_symbol_processing): Define. + +2016-06-28 James Clarke + + * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Don't convert + R_SPARC_32 to R_SPARC_RELATIVE if class is ELFCLASS64. + +2016-06-28 Maciej W. Rozycki + + * elf32-mips.c (elf_mips16_howto_table_rel): Add + R_MIPS16_PC16_S1. + (mips16_reloc_map): Likewise. + * elf64-mips.c (mips16_elf64_howto_table_rel): Likewise. + (mips16_elf64_howto_table_rela): Likewise. + (mips16_reloc_map): Likewise. + * elfn32-mips.c (elf_mips16_howto_table_rel): Likewise. + (elf_mips16_howto_table_rela): Likewise. + (mips16_reloc_map): Likewise. + * elfxx-mips.c (mips16_branch_reloc_p): New function. + (mips16_reloc_p): Handle R_MIPS16_PC16_S1. + (b_reloc_p): Likewise. + (mips_elf_calculate_relocation): Likewise. + (_bfd_mips_elf_check_relocs): Likewise. + * reloc.c (BFD_RELOC_MIPS16_16_PCREL_S1): New relocation. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + +2016-06-27 Alan Modra + + PR ld/19264 + * elf64-ppc.c (STUB_SHRINK_ITER): Define. + (ppc64_elf_size_stubs): Exit stub sizing loop past STUB_SHRINK_ITER + if shrinking stubs. + (ppc64_elf_size_stubs): Adjust to suit. + +2016-06-27 Trevor Saunders + + * elf32-dlx.h: New file. + * elf32-dlx.c: Adjust. + +2016-06-25 Trevor Saunders + + * elf32-xtensa.c (xtensa_make_property_section): Remove prototype. + +2016-06-24 John Baldwin + + * elf.c (elfcore_grok_freebsd_note): Handle NT_FREEBSD_PROCSTAT_AUXV + notes. + +2016-06-24 John Baldwin + + * elf.c (elfcore_grok_note): Remove handling of NT_X86_XSTATE for + FreeBSD. Remove case for NT_FREEBSD_THRMISC. + (elfcore_grok_freebsd_psinfo): New function. + (elfcore_grok_freebsd_prstatus): New function. + (elfcore_grok_freebsd_note): New function. + (elf_parse_notes): Use "elfcore_grok_freebsd_note" for "FreeBSD" + notes. + +2016-06-24 Joel Brobecker + + * elflink.c: Check the value of BFD_SUPPORTS_PLUGINS rather + than its existance. + +2016-06-24 Alan Modra + + * config.bfd: Delete mips vxworks patterns matched earlier. + Combine mips*-*-none with mips*-*-elf*. + +2016-06-21 Maciej W. Rozycki + + * elfxx-mips.c (mips_elf_perform_relocation): Call + `info->callbacks->einfo' rather than `*_bfd_error_handler' and + use the `%X%H' format for the cross-mode jump conversion error + message. Remove the full stop from the end of the message. + Continue processing rather than returning failure. + +2016-06-21 Graham Markall + + * archures.c: Remove bfd_mach_arc_nps400. + * bfd-in2.h: Likewise. + * cpu-arc.c (arch_info_struct): Likewise. + * elf32-arc.c (arc_elf_object_p, arc_elf_final_write_processing): + Likewise. + +2016-06-20 H.J. Lu + + PR ld/18250 + PR ld/20267 + * elflink.c: Include plugin.h if BFD_SUPPORTS_PLUGINS is + defined. + (elf_link_is_defined_archive_symbol): Call + bfd_link_plugin_object_p on unknown plugin object and use the + IR symbol table if the input is an IR object. + * plugin.c (bfd_link_plugin_object_p): New function. + * plugin.h (bfd_link_plugin_object_p): New prototype. + +2016-06-20 H.J. Lu + + PR ld/20276 + * elflink.c (elf_link_add_object_symbols): Don't check alignment + on symbol from plugin dummy input. + +2016-06-18 H.J. Lu + + * bfd.c (bfd_plugin_format): Rename bfd_plugin_uknown to + bfd_plugin_unknown. + * bfd-in2.h: Regenerated. + * plugin.c (bfd_plugin_object_p): Replace bfd_plugin_uknown + with bfd_plugin_unknown. + +2016-06-18 H.J. Lu + + PR ld/20253 + * elf-bfd.h (_bfd_elf_allocate_ifunc_dyn_relocs): Add an + bfd_boolean argument. + * elf-ifunc.c (_bfd_elf_create_ifunc_sections): Replace + "shared object" with "PIC object" in comments. + (_bfd_elf_allocate_ifunc_dyn_relocs): Updated. Replace + "shared object" with "PIC object" in comments. Avoid PLT if + requested. Generate dynamic relocations for non-GOT references. + Make room for the special first entry in PLT and allocate PLT + entry only for PLT and PC-relative references. Store dynamic + GOT relocations in .rel[a].iplt section for static executables. + If PLT isn't used, always use GOT for symbol value. Don't + allocate GOT entry if it isn't used. + * elf32-i386.c (elf_i386_check_relocs): Increment PLT reference + count only in the code section. Allocate dynamic pointer + relocation against STT_GNU_IFUNC symbol in the non-code section. + (elf_i386_adjust_dynamic_symbol): Increment PLT reference count + only for PC-relative references. + (elf_i386_allocate_dynrelocs): Pass TRUE to + _bfd_elf_allocate_ifunc_dyn_relocs. + (elf_i386_relocate_section): Allow R_386_GOT32/R_386_GOT32X + relocations against STT_GNU_IFUNC symbols without PLT. Generate + dynamic pointer relocation against STT_GNU_IFUNC symbol in + the non-code section and store it in the proper REL section. + Don't allow non-pointer relocation against STT_GNU_IFUNC symbol + without PLT. + (elf_i386_finish_dynamic_symbol): Generate dynamic + R_386_IRELATIVE and R_386_GLOB_DAT GOT relocations against + STT_GNU_IFUNC symbols without PLT. + (elf_i386_finish_dynamic_sections): Don't handle local + STT_GNU_IFUNC symbols here. + (elf_i386_output_arch_local_syms): Handle local STT_GNU_IFUNC + symbols here. + (elf_backend_output_arch_local_syms): New. + * elf32-x86-64.c (elf_i386_check_relocs): Increment PLT reference + count only in the code section. Allocate dynamic pointer + relocation against STT_GNU_IFUNC symbol in the non-code section. + (elf_x86_64_adjust_dynamic_symbol): Increment PLT reference + count only for PC-relative references. + (elf_x86_64_allocate_dynrelocs): Pass TRUE to + _bfd_elf_allocate_ifunc_dyn_relocs. + (elf_x86_64_relocate_section): Allow R_X86_64_GOTPCREL, + R_X86_64_GOTPCRELX, R_X86_64_REX_GOTPCRELX and + R_X86_64_GOTPCREL64 relocations against STT_GNU_IFUNC symbols + without PLT. Generate dynamic pointer relocation against + STT_GNU_IFUNC symbol in the non-code section and store it in + the proper RELA section. Don't allow non-pointer relocation + against STT_GNU_IFUNC symbol without PLT. + (elf_x86_64_finish_dynamic_symbol): Generate dynamic + R_X86_64_IRELATIVE and R_X86_64_GLOB_DAT GOT relocations against + STT_GNU_IFUNC symbols without PLT. + (elf_x86_64_finish_dynamic_sections): Don't handle local + STT_GNU_IFUNC symbols here. + (elf_x86_64_output_arch_local_syms): Handle local STT_GNU_IFUNC + symbols here. + (elf_backend_output_arch_local_syms): New. + * elfnn-aarch64.c (elfNN_aarch64_allocate_ifunc_dynrelocs): + Pass FALSE to _bfd_elf_allocate_ifunc_dyn_relocs. + +2016-06-17 Thomas Preud'homme + Tony Wang + + * elf32-arm.c (elf32_arm_stub_long_branch_thumb2_only): Define stub + sequence. + (stub_long_branch_thumb2_only): Define stub. + (arm_stub_is_thumb): Add case for arm_stub_long_branch_thumb2_only. + (arm_stub_long_branch_thumb2_only): Likewise. + (arm_type_of_stub): Use arm_stub_long_branch_thumb2_only for Thumb-2 + capable targets. + +2016-06-17 Jose E. Marchesi + + * archures.c (bfd_mach_sparc_v8plusc): Define. + (bfd_mach_sparc_v9c): Likewise. + (bfd_mach_sparc_v8plusd): Likewise. + (bfd_mach_sparc_v9d): Likewise. + (bfd_mach_sparc_v8pluse): Likewise. + (bfd_mach_sparc_v9e): Likewise. + (bfd_mach_sparc_v8plusv): Likewise + (bfd_mach_sparc_v9v): Likewise. + (bfd_mach_sparc_v8plusm): Likewise. + (bfd_mach_sparc_v9m): Likewise. + (bfd_mach_sparc_v9_p): Adapt to v8plusm and v9m. + (bfd_mach_sparc_64bit_p): Likewise. + * bfd-in2.h: Regenerate. + * cpu-sparc.c (arch_info_struct): Add entries for + bfd_mach_sparc_v8plus{c,d,e,v,m} and bfd_mach_sparc_v9{c,d,e,v,m}. + * aoutx.h (machine_type): Handle bfd_mach_sparc_v8plus{c,d,e,v,m} + and bfd_mach_sparc_v9{c,d,e,v,m}. + * elf32-sparc.c (elf32_sparc_final_write_processing): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_object_p): Likewise. + +2016-06-16 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Don't check undefined + symbols for relocations against IFUNC symbols. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + +2016-06-16 Marcin Kościelnicki + + * elf32-s390.c (elf_s390_finish_dynamic_sections): Include + .rela.iplt in DT_PLTRELSZ. + * elf64-s390.c (elf_s390_finish_dynamic_sections): Likewise, + for DT_PLTRELSZ and DT_RELASZ as well. + +2016-06-16 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Skip relocations in + non-loaded, non-alloced sections. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + +2016-06-15 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Check SEC_ALLOC before + allocating dynamic relocation. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + +2016-06-14 Senthil Kumar Selvaraj + + PR ld/20254 + * elf32-avr.c (elf32_avr_relax_delete_bytes): Adjust reloc + offsets until reloc_toaddr. + +2016-06-14 H.J. Lu + + * elf32-i386.c (elf_i386_reloc_type_class): Check R_386_IRELATIVE. + Don't check symbol type for STN_UNDEF symbol index. + * elf64-x86-64.c (elf_x86_64_reloc_type_class): Check + R_X86_64_IRELATIVE. Don't check symbol type for STN_UNDEF symbol + index. + +2016-06-14 Thomas Preud'homme + + * elf32-arm.c (using_thumb_only): Force review of arch check logic for + new architecture. + (using_thumb2): Try Tag_THUMB_ISA_use first and check + for exact arch value then. Force review of arch check logic for new + architecture. + (arch_has_arm_nop): Update and fix arch check logic. Force review of + that logic for new architecture. + (arch_has_thumb2_nop): Remove. + (elf32_arm_tls_relax): Use using_thumb2 instead of above function. + (elf32_arm_final_link_relocate): Likewise but using thumb2. + +2016-06-14 Alan Modra + + * bfd-in.h (bfd_my_archive): Delete. + * bfd-in2.h: Regenerate. + +2016-06-14 Alan Modra + + PR ld/20241 + * archive.c (open_nested_file): Set my_archive. + * bfd.c (_bfd_default_error_handler <%B>): Exclude archive file name + for thin archives. + * bfdio.c (bfd_tell): Don't adjust origin for thin archives. + (bfd_seek): Likewise. + * bfdwin.c (bfd_get_file_window): Likewise. + * cache.c (cache_bmmap): Likewise. + (bfd_cache_lookup_worker): Don't look in my_archive for thin archives. + * mach-o.c (bfd_mach_o_follow_dsym): Don't open my_archive for + thin archives. + * plugin.c (try_claim): Likewise. + * xcofflink.c (xcoff_link_add_dynamic_symbols): Use import path of + file within thin archive, not the archive. + +2016-06-13 H.J. Lu + + PR ld/20244 + * elf32-i386.c (elf_i386_relocate_section): Add the .got.plt + section address for R_386_GOT32/R_386_GOT32X relocations against + IFUNC symbols if there is no base register and return error for + PIC. + +2016-06-13 H.J. Lu + + * elf32-i386.c (elf_i386_relocate_section): Simplify IFUNC + GOT32 adjustment for static executables. + +2016-06-13 Maciej W. Rozycki + + * elf32-mips.c (elf_mips_gnu_pcrel32): Update comment. + +2016-06-13 Cupertino Miranda + + * elf32-arc.c (elf_arc_relocate_section): Fixed condition. + +2016-06-13 Cupertino Miranda + + * elf32-arc.c (elf_arc_finish_dynamic_sections): Changed. + +2016-06-13 Cupertino Miranda + + * elf32-arc.c (arc_local_data, arc_local_data): Removed. + (SECTSTART): Changed. + (elf_arc_relocate_section): Fixed mistake in PIE related + condition. + (elf_arc_size_dynamic_sections): Changed DT_RELENT to DT_RELAENT. + +2016-06-13 Cupertino Miranda + + * elf32-arc.c (elf32_arc_reloc_type_class): Defined function to + enable support for "-z combreloc" and DT_RELACOUNT. + (elf_backend_reloc_type_class): Likewise + +2016-06-11 H.J. Lu + + PR ld/20244 + * elf32-i386.c (elf_i386_relocate_section): When relocating + R_386_GOT32, return error without a base register for PIC and + subtract the .got.plt section address only with a base register. + +2016-06-10 Alan Modra + + * elf-strtab.c (struct strtab_save): Use size_t for "size". + (struct elf_strtab_hash): Likewise for "size" and "alloced". + (_bfd_elf_strtab_init): Formatting. + (_bfd_elf_strtab_add): Return size_t rather than bfd_size_type. + (_bfd_elf_strtab_addref): Take size_t idx param. + (_bfd_elf_strtab_delref, _bfd_elf_strtab_refcount): Likewise. + (_bfd_elf_strtab_offset): Likewise. + (_bfd_elf_strtab_clear_all_refs): Use size_t idx. + (_bfd_elf_strtab_save): Use size_t "idx" and "size" vars. + (_bfd_elf_strtab_restore, _bfd_elf_strtab_emit): Similarly. + (_bfd_elf_strtab_finalize): Similarly. + * elf-bfd.h (_bfd_elf_strtab_add): Update prototypes. + (_bfd_elf_strtab_addref, _bfd_elf_strtab_delref): Likewise. + (_bfd_elf_strtab_refcount, _bfd_elf_strtab_offset): Likewise. + * elf.c (bfd_elf_get_elf_syms): Calculate symbol buffer size + using bfd_size_type. + (bfd_section_from_shdr): Delete amt. + (_bfd_elf_init_reloc_shdr): Likewise. + (_bfd_elf_link_assign_sym_version): Likewise. + (assign_section_numbers): Use size_t reloc_count. + * elflink.c (struct elf_symbuf_head): Use size_t "count". + (bfd_elf_link_record_dynamic_symbol): Use size_t for some vars. + (elf_link_is_defined_archive_symbol): Likewise. + (elf_add_dt_needed_tag): Likewise. + (elf_finalize_dynstr): Likewise. + (elf_link_add_object_symbols): Likewise. + (bfd_elf_size_dynamic_sections): Likewise. + (elf_create_symbuf): Similarly. + (bfd_elf_match_symbols_in_sections): Likewise. + (elf_link_swap_symbols_out): Likewise. + (elf_link_check_versioned_symbol): Likewise. + (bfd_elf_gc_record_vtinherit): Likewise. + (bfd_elf_gc_common_finalize_got_offsets): Likewise. + +2016-06-08 Senthil Kumar Selvaraj + + PR ld/20221 + * elf32-avr.c (elf32_avr_relax_delete_bytes): Adjust syms + and relocs only if shrinking occurred. + +2016-06-08 H.J. Lu + + * elf64-i386.c (elf_i386_link_hash_entry): Add tls_get_addr. + (elf_i386_link_hash_newfunc): Initialize tls_get_addr to 2. + (elf_i386_check_tls_transition): Check indirect call and direct + call with the addr32 prefix for general and local dynamic models. + Set the tls_get_addr feild. + (elf_i386_convert_load_reloc): Always use addr32 prefix for + indirect ___tls_get_addr call via GOT. + (elf_i386_relocate_section): Handle GD->LE, GD->IE and LD->LE + transitions with indirect call and direct call with the addr32 + prefix. + +2016-06-07 Marcin Kościelnicki + + * elf32-s390.c (elf_s390_finish_dynamic_symbol): Fix comment. + * elf64-s390.c (elf_s390x_plt_entry): Fix comment. + (elf_s390_relocate_section): Fix comment. + (elf_s390_finish_dynamic_sections): Fix initialization of fixed + .got.plt entries. + +2016-06-07 Ulrich Weigand + + * elf64-s390.c (elf_s390_finish_dynamic_sections): Subtract plt + section offset when calculation the larl operand in the first PLT + entry. + +2016-06-07 Alan Modra + + * cpu-powerpc.c (powerpc_compatible): Allow bfd_mach_ppc_vle entry + to match other 32-bit archs. + * elf32-ppc.c (_bfd_elf_ppc_set_arch): New function. + (ppc_elf_object_p): Call it. + (ppc_elf_special_sections): Use APUINFO_SECTION_NAME. Fix + overlong line. + (APUINFO_SECTION_NAME, APUINFO_LABEL): Don't define here. + * elf64-ppc.c (ppc64_elf_object_p): Call _bfd_elf_ppc_set_arch. + * bfd-in.h (_bfd_elf_ppc_at_tls_transform, + _bfd_elf_ppc_at_tprel_transform): Move to.. + * elf-bfd.h: ..here. + (_bfd_elf_ppc_set_arch): Declare. + * bfd-in2.h: Regenerate. + +2016-06-06 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_link_hash_entry): Add tls_get_addr. + (elf_x86_64_link_hash_newfunc): Initialize tls_get_addr to 2. + (elf_x86_64_check_tls_transition): Check indirect call and + direct call with the addr32 prefix for general and local dynamic + models. Set the tls_get_addr feild. + (elf_x86_64_convert_load_reloc): Always use addr32 prefix for + indirect __tls_get_addr call via GOT. + (elf_x86_64_relocate_section): Handle GD->LE, GD->IE and LD->LE + transitions with indirect call and direct call with the addr32 + prefix. + +2016-06-04 Christian Groessler + + * coff-z8k.c (extra_case): Fix range check for R_JR relocation. + +2016-06-02 Nick Clifton + + PR target/20088 + * cpu-arm.c (processors): Add "arm_any" type to match any ARM + architecture. + (arch_info_struct): Likewise. + (architectures): Likewise. + +2016-06-02 Vineet Gupta + + * config.bfd: Replace -uclibc with *. + +2016-06-02 H.J. Lu + + * elf64-x86-64.c: Replace data32 with data16 in comments. + +2016-05-31 Alan Modra + + PR ld/20159 + PR ld/16467 + * elflink.c (_bfd_elf_merge_symbol): Revert PR16467 change. + (_bfd_elf_add_default_symbol): Don't indirect to/from defined + symbol given a version by a script different to the version + of the symbol being added. + (elf_link_add_object_symbols): Use _bfd_elf_strtab_save and + _bfd_elf_strtab_restore. Don't fudge dynstr references. + * elf-strtab.c (_bfd_elf_strtab_restore_size): Delete. + (struct strtab_save): New. + (_bfd_elf_strtab_save, _bfd_elf_strtab_restore): New functions. + * elf-bfd.h (_bfd_elf_strtab_restore_size): Delete. + (_bfd_elf_strtab_save, _bfd_elf_strtab_restore): Declare. + +2016-06-01 Trevor Saunders + + * elf32-hppa.h: Add extern "C". + * elf32-nds32.h: Likewise. + * elf32-tic6x.h: Likewise. + +2016-06-01 Nick Clifton + + * po/sr.po: New Serbian translation. + * configure.ac (ALL_LINGUAS): Add sr. + * configure: Regenerate. + +2016-05-28 Maciej W. Rozycki + + * elfxx-mips.c (b_reloc_p): New function. + (_bfd_mips_elf_relocate_section) : Handle + branch relocations. + +2016-05-28 Maciej W. Rozycki + + * elfxx-mips.c (mips_elf_calculate_relocation): + : Drop the region bits of the + reloc location from calculation, treat the addend as signed with + local non-section symbols and enable overflow detection. + +2016-05-28 Alan Modra + + * aoutx.h: Adjust linker callback calls throughout file, + removing dead code. + * bout.c: Likewise. + * coff-alpha.c: Likewise. + * coff-arm.c: Likewise. + * coff-h8300.c: Likewise. + * coff-h8500.c: Likewise. + * coff-i960.c: Likewise. + * coff-mcore.c: Likewise. + * coff-mips.c: Likewise. + * coff-ppc.c: Likewise. + * coff-rs6000.c: Likewise. + * coff-sh.c: Likewise. + * coff-tic80.c: Likewise. + * coff-w65.c: Likewise. + * coff-z80.c: Likewise. + * coff-z8k.c: Likewise. + * coff64-rs6000.c: Likewise. + * cofflink.c: Likewise. + * ecoff.c: Likewise. + * elf-bfd.h: Likewise. + * elf-m10200.c: Likewise. + * elf-m10300.c: Likewise. + * elf32-arc.c: Likewise. + * elf32-arm.c: Likewise. + * elf32-avr.c: Likewise. + * elf32-bfin.c: Likewise. + * elf32-cr16.c: Likewise. + * elf32-cr16c.c: Likewise. + * elf32-cris.c: Likewise. + * elf32-crx.c: Likewise. + * elf32-d10v.c: Likewise. + * elf32-epiphany.c: Likewise. + * elf32-fr30.c: Likewise. + * elf32-frv.c: Likewise. + * elf32-ft32.c: Likewise. + * elf32-h8300.c: Likewise. + * elf32-hppa.c: Likewise. + * elf32-i370.c: Likewise. + * elf32-i386.c: Likewise. + * elf32-i860.c: Likewise. + * elf32-ip2k.c: Likewise. + * elf32-iq2000.c: Likewise. + * elf32-lm32.c: Likewise. + * elf32-m32c.c: Likewise. + * elf32-m32r.c: Likewise. + * elf32-m68hc1x.c: Likewise. + * elf32-m68k.c: Likewise. + * elf32-mep.c: Likewise. + * elf32-metag.c: Likewise. + * elf32-microblaze.c: Likewise. + * elf32-moxie.c: Likewise. + * elf32-msp430.c: Likewise. + * elf32-mt.c: Likewise. + * elf32-nds32.c: Likewise. + * elf32-nios2.c: Likewise. + * elf32-or1k.c: Likewise. + * elf32-ppc.c: Likewise. + * elf32-s390.c: Likewise. + * elf32-score.c: Likewise. + * elf32-score7.c: Likewise. + * elf32-sh.c: Likewise. + * elf32-sh64.c: Likewise. + * elf32-spu.c: Likewise. + * elf32-tic6x.c: Likewise. + * elf32-tilepro.c: Likewise. + * elf32-v850.c: Likewise. + * elf32-vax.c: Likewise. + * elf32-visium.c: Likewise. + * elf32-xstormy16.c: Likewise. + * elf32-xtensa.c: Likewise. + * elf64-alpha.c: Likewise. + * elf64-hppa.c: Likewise. + * elf64-ia64-vms.c: Likewise. + * elf64-mmix.c: Likewise. + * elf64-ppc.c: Likewise. + * elf64-s390.c: Likewise. + * elf64-sh64.c: Likewise. + * elf64-x86-64.c: Likewise. + * elflink.c: Likewise. + * elfnn-aarch64.c: Likewise. + * elfnn-ia64.c: Likewise. + * elfxx-mips.c: Likewise. + * elfxx-sparc.c: Likewise. + * elfxx-tilegx.c: Likewise. + * linker.c: Likewise. + * pdp11.c: Likewise. + * pe-mips.c: Likewise. + * reloc.c: Likewise. + * reloc16.c: Likewise. + * simple.c: Likewise. + * vms-alpha.c: Likewise. + * xcofflink.c: Likewise. + * elf32-rl78.c (get_symbol_value, get_romstart, get_ramstart): Delete + status param. Adjust calls to these and linker callbacks throughout. + * elf32-rx.c: (get_symbol_value, get_gp, get_romstart, + get_ramstart): Delete status param. Adjust calls to these and + linker callbacks throughout. + +2016-05-27 Maciej W. Rozycki + + * elfxx-mips.c (mips_elf_calculate_relocation) + : Include the addend in JALX's + target alignment verification. + +2016-05-27 Maciej W. Rozycki + + * elfxx-mips.c (mips_elf_calculate_relocation): Also use the + section name if `bfd_elf_string_from_elf_section' returns an + empty string. + +2016-05-26 Maciej W. Rozycki + + * elfxx-mips.c (_bfd_mips_elf_relocate_section) + : Use the `%X%H' rather than `%C' format + for message. Continue processing rather than returning failure. + +2016-05-25 Maciej W. Rozycki + + * elfxx-mips.c (_bfd_mips_elf_relocate_section) + : Call `->einfo' rather than `->warning'. + Call `bfd_set_error'. + +2016-05-25 H.J. Lu + + PR binutils/14625 + * archive.c (bfd_slurp_armap): Replace + bfd_elf64_archive_slurp_armap with + _bfd_archive_64_bit_slurp_armap. + (bsd_write_armap): Call _bfd_archive_64_bit_write_armap if + BFD64 is defined and the archive is too big. + (coff_write_armap): Likewise. + * archive64.c (bfd_elf64_archive_slurp_armap): Renamed to ... + (_bfd_archive_64_bit_slurp_armap): This. + (bfd_elf64_archive_write_armap): Renamed to ... + (_bfd_archive_64_bit_write_armap): This. + * configure.ac: Add --enable-64-bit-archive. + (want_64_bit_archive): New. Set to true by default for 64-bit + MIPS and s390 ELF targets. + (USE_64_BIT_ARCHIVE): New AC_DEFINE. + * config.in: Regenerated. + * configure: Likewise. + * elf64-mips.c (bfd_elf64_archive_functions): Removed. + (bfd_elf64_archive_slurp_armap): Likewise. + (bfd_elf64_archive_write_armap): Likewise. + (bfd_elf64_archive_slurp_extended_name_table): Likewise. + (bfd_elf64_archive_construct_extended_name_table): Likewise. + (bfd_elf64_archive_truncate_arname): Likewise. + (bfd_elf64_archive_read_ar_hdr): Likewise. + (bfd_elf64_archive_write_ar_hdr): Likewise. + (bfd_elf64_archive_openr_next_archived_file): Likewise. + (bfd_elf64_archive_get_elt_at_index): Likewise. + (bfd_elf64_archive_generic_stat_arch_elt): Likewise. + (bfd_elf64_archive_update_armap_timestamp): Likewise. + * elf64-s390.c (bfd_elf64_archive_functions): Removed. + (bfd_elf64_archive_slurp_armap): Likewise. + (bfd_elf64_archive_write_armap): Likewise. + (bfd_elf64_archive_slurp_extended_name_table): Likewise. + (bfd_elf64_archive_construct_extended_name_table): Likewise. + (bfd_elf64_archive_truncate_arname): Likewise. + (bfd_elf64_archive_read_ar_hdr): Likewise. + (bfd_elf64_archive_write_ar_hdr): Likewise. + (bfd_elf64_archive_openr_next_archived_file): Likewise. + (bfd_elf64_archive_get_elt_at_index): Likewise. + (bfd_elf64_archive_generic_stat_arch_elt): Likewise. + (bfd_elf64_archive_update_armap_timestamp): Likewise. + * elfxx-target.h (TARGET_BIG_SYM): Use _bfd_archive_64_bit on + BFD_JUMP_TABLE_ARCHIVE if USE_64_BIT_ARCHIVE is defined and + bfd_elfNN_archive_functions isn't defined. + (TARGET_LITTLE_SYM): Likewise. + * libbfd-in.h (_bfd_archive_64_bit_slurp_armap): New prototype. + (_bfd_archive_64_bit_write_armap): Likewise. + (_bfd_archive_64_bit_slurp_extended_name_table): New macro. + (_bfd_archive_64_bit_construct_extended_name_table): Likewise. + (_bfd_archive_64_bit_truncate_arname): Likewise. + (_bfd_archive_64_bit_read_ar_hdr): Likewise. + (_bfd_archive_64_bit_write_ar_hdr): Likewise. + (_bfd_archive_64_bit_openr_next_archived_file): Likewise. + (_bfd_archive_64_bit_get_elt_at_index): Likewise. + (_bfd_archive_64_bit_generic_stat_arch_elt): Likewise. + (_bfd_archive_64_bit_update_armap_timestamp): Likewise. + * libbfd.h: Regenerated. + * plugin.c (plugin_vec): Use _bfd_archive_64_bit on + BFD_JUMP_TABLE_ARCHIVE if USE_64_BIT_ARCHIVE is defined. + +2016-05-25 H.J. Lu + + PR ld/20103 + * cofflink.c (coff_link_check_archive_element): Return TRUE if + linker add_archive_element callback returns FALSE. + * ecoff.c (ecoff_link_check_archive_element): Likewise. + * elf64-ia64-vms.c (elf64_vms_link_add_archive_symbols): Skip + archive element if linker add_archive_element callback returns + FALSE. + * elflink.c (elf_link_add_archive_symbols): Likewise. + * pdp11.c (aout_link_check_ar_symbols): Likewise. + * vms-alpha.c (alpha_vms_link_add_archive_symbols): Likewise. + * xcofflink.c (xcoff_link_check_dynamic_ar_symbols): Likewise. + (xcoff_link_check_ar_symbols): Likewise. + +2016-05-24 Maciej W. Rozycki + + * elfxx-mips.c (_bfd_mips_elf_relocate_section) + : Unify error reporting code. + +2016-05-23 Jim Wilson + + * elfnn-aarch64.c: Unconditionally enable R_AARCH64_NULL and + R_AARCH64_NONE. Use HOWTO64 for R_AARCH64_NULL. + * relocs.c: Add BFD_RELOC_AARCH64_NULL. + * bfd-in2.h: Regenerate. + * libbfd.h: Likewise. + +2016-05-23 Kuba Sejdak + + * config.bfd: Add entry for arm-phoenix. + +2016-05-23 Thomas Preud'homme + + * elf32-arm.c (arm_dedicated_stub_section_padding): New function. + (elf32_arm_size_stubs): Declare stub_type in a more outer scope and + account for padding for stub section requiring one. + (elf32_arm_build_stubs): Add comment to stress the importance of + zeroing veneer section content. + +2016-05-23 Thomas Preud'homme + + * bfd-in.h (bfd_elf32_arm_keep_private_stub_output_sections): Declare + bfd hook. + * bfd-in2.h: Regenerate. + * elf32-arm.c (arm_dedicated_stub_output_section_required): New + function. + (arm_dedicated_stub_output_section_required_alignment): Likewise. + (arm_dedicated_stub_output_section_name): Likewise. + (arm_dedicated_stub_input_section_ptr): Likewise. + (elf32_arm_create_or_find_stub_sec): Add stub type parameter and + function description comment. Add support for dedicated output stub + section to given stub types. + (elf32_arm_add_stub): Add a stub type parameter and pass it down to + elf32_arm_create_or_find_stub_sec. + (elf32_arm_create_stub): Pass stub type down to elf32_arm_add_stub. + (elf32_arm_size_stubs): Pass stub type when calling + elf32_arm_create_or_find_stub_sec for Cortex-A8 erratum veneers. + (bfd_elf32_arm_keep_private_stub_output_sections): New function. + +2016-05-20 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Don't check R_386_GOT32 + when setting need_convert_load. + +2016-05-20 Maciej W. Rozycki + + * elfxx-mips.c (mips_elf_read_rel_addend): Adjust the addend for + microMIPS JALX. + +2016-05-19 H.J. Lu + + PR ld/20117 + * elf32-i386.c (elf_i386_convert_load_reloc): Don't check + R_386_GOT32X. + (elf_i386_convert_load): Don't convert R_386_GOT32. + +2016-05-20 Alan Modra + + PR gas/20118 + * elf.c (elf_fake_sections): Set sh_entsize for SHT_INIT_ARRAY, + SHT_FINI_ARRAY, and SHT_PREINIT_ARRAY. + +2016-05-19 Cupertino Miranda + + * elf32-arc.c (arc_elf_final_write_processing): Changed. + (debug_arc_reloc): Likewise. + (elf_arc_relocate_section): Likewise. + (elf_arc_check_relocs): Likewise. + (elf_arc_adjust_dynamic_symbol): Likewise. + (elf_arc_add_symbol_hook): Likewise. + +2016-05-19 Maciej W. Rozycki + + * config.bfd: Remove `am34-*-linux*' support. + +2016-05-19 Alan Modra + + * elf64-ppc.c (allocate_dynrelocs): Allocate got and other dynamic + relocs before plt relocs. + +2016-05-19 Alan Modra + + * elf64-ppc.c (ppc64_elf_branch_reloc): Check for NULL owner + before dereferencing. + +2016-05-18 Nick Clifton + + * po/sv.po: Updated Swedish translation. + +2016-05-18 Alan Modra + + * elf32-arm.c (elf32_arm_size_stubs): Free or cache local syms + for each BFD. Don't goto error_ret_free_local from outside loop. + +2016-05-17 Maciej W. Rozycki + + * elf-s390-common.c (elf_s390_add_symbol_hook): Remove + STB_GNU_UNIQUE handling. + * elf32-arc.c (elf_arc_add_symbol_hook): Likewise. + * elf32-arm.c (elf32_arm_add_symbol_hook): Likewise. + * elf32-m68k.c (elf_m68k_add_symbol_hook): Likewise. + * elf32-ppc.c (ppc_elf_add_symbol_hook): Likewise. + * elf32-sparc.c (elf32_sparc_add_symbol_hook): Likewise. + * elf64-ppc.c (ppc64_elf_add_symbol_hook): Likewise. + * elf64-sparc.c (elf64_sparc_add_symbol_hook): Likewise. + * elf64-x86-64.c (elf_x86_64_add_symbol_hook): Likewise. + * elfxx-aarch64.c (_bfd_aarch64_elf_add_symbol_hook): Likewise. + * elfxx-mips.c (_bfd_mips_elf_add_symbol_hook): Likewise. + * elf32-i386.c (elf_i386_add_symbol_hook): Remove function. + (elf_backend_add_symbol_hook): Remove macro. + * elflink.c (elf_link_add_object_symbols): Set `has_gnu_symbols' + for STB_GNU_UNIQUE symbols. + +2016-05-16 Maciej W. Rozycki + + * elf32-v850.c (v850_elf_copy_notes): New function, factored out + from... + (v850_elf_copy_private_bfd_data): ... here. Call the new + function and `_bfd_elf_copy_private_bfd_data'. + +2016-05-13 H.J. Lu + + PR ld/20093 + * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Don't convert + GOTPCREL relocation against large section. + +2016-05-13 Alan Modra + + * elf-m10300.c (_bfd_mn10300_elf_finish_dynamic_sections): Use + linker dynamic sections in calculating size and address of + dynamic tags rather than using output sections. Remove asserts. + * elf32-arm.c (elf32_arm_finish_dynamic_sections): Likewise. + * elf32-cr16.c (_bfd_cr16_elf_finish_dynamic_sections): Likewise. + * elf32-cris.c (elf_cris_finish_dynamic_sections): Likewise. + * elf32-i370.c (i370_elf_finish_dynamic_sections): Likewise. + * elf32-lm32.c (lm32_elf_finish_dynamic_sections): Likewise. + * elf32-m32r.c (m32r_elf_finish_dynamic_sections): Likewise. + * elf32-m68k.c (elf_m68k_finish_dynamic_sections): Likewise. + * elf32-metag.c (elf_metag_finish_dynamic_sections): Likewise. + * elf32-microblaze.c (microblaze_elf_finish_dynamic_sections): Likewise. + * elf32-nds32.c (nds32_elf_finish_dynamic_sections): Likewise. + * elf32-nios2.c (nios2_elf32_finish_dynamic_sections): Likewise. + * elf32-or1k.c (or1k_elf_finish_dynamic_sections): Likewise. + * elf32-s390.c (elf_s390_finish_dynamic_sections): Likewise. + * elf32-score.c (s3_bfd_score_elf_finish_dynamic_sections): Likewise. + * elf32-score7.c (s7_bfd_score_elf_finish_dynamic_sections): Likewise. + * elf32-vax.c (elf_vax_finish_dynamic_sections): Likewise. + * elf32-xtensa.c (elf_xtensa_finish_dynamic_sections): Likewise. + * elf64-alpha.c (elf64_alpha_finish_dynamic_sections): Likewise. + * elf64-s390.c (elf_s390_finish_dynamic_sections): Likewise. + * elf64-sh64.c (sh64_elf64_finish_dynamic_sections): Likewise. + * elflink.c (bfd_elf_final_link): Likewise. + * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Likewise. + * elfxx-sparc.c (sparc_finish_dyn): Likewise. Adjust error message. + * elf32-arc.c (GET_SYMBOL_OR_SECTION): Remove ASSERT arg and + don't set doit. Look up dynobj section. + (elf_arc_finish_dynamic_sections): Adjust GET_SYMBOL_OR_SECTION + invocation and dynamic tag vma calculation. Don't test + boolean var == TRUE. + * elfnn-aarch64.c (elfNN_aarch64_finish_dynamic_sections): Fix + DT_JMPREL calc. + +2016-05-13 Alan Modra + + * elflink.c (elf_link_sort_relocs): Wrap overlong lines. Fix + octets_per_byte. Put dynamic .rela.plt last in link orders. + Assign output_offset for reloc sections rather than writing + sorted relocs from block corresponding to output_offset. + +2016-05-12 Alan Modra + + * elf-bfd.h (elf_reloc_type_class): Put reloc_class_plt last. + +2016-05-11 Andrew Bennett + + * elfxx-mips.c (print_mips_ases): Add DSPR3. + +2016-05-11 Alan Modra + + * elf32-hppa.c (elf32_hppa_init_stub_bfd): New function. + (elf32_hppa_check_relocs): Don't set dynobj. + (elf32_hppa_size_stubs): Test !SEC_LINKER_CREATED for stub sections. + (elf32_hppa_build_stubs): Likewise. + * elf32-hppa.h (elf32_hppa_init_stub_bfd): Declare. + +2016-05-11 Alan Modra + + PR 20060 + * elf64-ppc.c (ppc64_elf_tls_setup): Clear forced_local. + * elf32-ppc.c (ppc_elf_tls_setup): Likewise. + +2016-05-10 Jiong Wang + + * elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Remove redundant + aarch64_tls_transition check. + +2016-05-10 Thomas Preud'homme + + * elf32-arm.c (enum elf32_arm_stub_type): New max_stub_type + enumerator. + (arm_stub_sym_claimed): New function. + (elf32_arm_create_stub): Use veneered symbol name and section if + veneer needs to claim its symbol, and keep logic unchanged otherwise. + (arm_stub_claim_sym): New function. + (arm_map_one_stub): Call arm_stub_claim_sym if veneer needs to claim + veneered symbol, otherwise create local symbol as before. + +2016-05-10 Thomas Preud'homme + + * elf32-arm.c (elf32_arm_size_stubs): Use new macros + ARM_GET_SYM_BRANCH_TYPE and ARM_SET_SYM_BRANCH_TYPE to respectively get + and set branch type of a symbol. + (bfd_elf32_arm_process_before_allocation): Likewise. + (elf32_arm_relocate_section): Likewise and fix identation along the + way. + (allocate_dynrelocs_for_symbol): Likewise. + (elf32_arm_finish_dynamic_symbol): Likewise. + (elf32_arm_swap_symbol_in): Likewise. + (elf32_arm_swap_symbol_out): Likewise. + +2016-05-10 Thomas Preud'homme + + * bfd-in.h (elf32_arm_size_stubs): Add an output section parameter. + * bfd-in2.h: Regenerated. + * elf32-arm.c (struct elf32_arm_link_hash_table): Add an output section + parameter to add_stub_section callback. + (elf32_arm_create_or_find_stub_sec): Get output section from link_sec + and pass it down to add_stub_section. + (elf32_arm_add_stub): Set section to stub_sec if NULL before using it + for error message. + (elf32_arm_size_stubs): Add output section parameter to + add_stub_section function pointer parameter. + +2016-05-10 Thomas Preud'homme + + * elf32-arm.c (elf32_arm_create_stub): New function. + (elf32_arm_size_stubs): Use elf32_arm_create_stub for stub creation. + +2016-05-10 Thomas Preud'homme + + * elf32-arm.c (enum elf32_arm_stub_type): Delete + arm_stub_a8_veneer_lwm enumerator. + (arm_stub_a8_veneer_lwm): New unsigned constant to replace + aforementioned enumerator. + (struct elf32_arm_stub_hash_entry): Delete target_addend + field and add source_value. + (struct a8_erratum_fix): Delete addend field and add target_offset. + (stub_hash_newfunc): Initialize source_value field amd remove + initialization for target_addend. + (arm_build_one_stub): Stop special casing Thumb relocations: promote + the else to being always executed, moving the + arm_stub_a8_veneer_b_cond specific code in it. Remove + stub_entry->target_addend from points_to computation. + (cortex_a8_erratum_scan): Store in a8_erratum_fix structure the offset + to target symbol from start of section rather than the offset from the + stub address. + (elf32_arm_size_stubs): Set stub_entry's source_value and target_value + fields from struct a8_erratum_fix's offset and target_offset + respectively. + (make_branch_to_a8_stub): Rename target variable to loc. Compute + veneered_insn_loc and loc using stub_entry's source_value. + +2016-05-10 Thomas Preud'homme + + (elf32_arm_merge_eabi_attributes): Add merging logic for + Tag_DSP_extension. + +2016-05-10 Pip Cet + + PR ld/20059 + * elfxx-target.h (bfd_elfNN_bfd_copy_link_hash_symbol_type): + Define as _bfd_generic_copy_link_hash_symbol_type when using + generic hash table. + +2016-05-09 Nick Clifton + + PR binutils/20063 + * elf.c (bfd_elf_get_elf_syms): Check for out of range sh_link + field before accessing sections array. + +2016-05-09 Christophe Monat + + PR ld/20030 + * elf32-arm.c (is_thumb2_vldm): Account for T1 (DP) encoding. + (stm32l4xx_need_create_replacing_stub): Rename ambiguous nb_regs + to nb_words. + (create_instruction_vldmia): Add is_dp to disambiguate SP/DP + encoding. + (create_instruction_vldmdb): Likewise. + (stm32l4xx_create_replacing_stub_vldm): is_dp detects DP encoding, + uses it to re-encode. + +2016-05-09 Nick Clifton + + PR 19938 + * elf32-arm.c (elf32_arm_adjust_dynamic_symbol): Revert accidental + commit. + +2016-05-09 Alan Modra + + * elf64-ppc.c (ppc64_elf_init_stub_bfd): Remove redundant NULL check. + +2016-05-06 H.J. Lu + + PR ld/17550 + * elf-bfd.h (elf_link_hash_entry): Update comments for indx, + documenting that indx == -3 if symbol is defined in a discarded + section. + * elflink.c (elf_link_add_object_symbols): Set indx to -3 if + symbol is defined in a discarded section. + (elf_link_output_extsym): Strip a global symbol defined in a + discarded section. + +2016-05-06 H.J. Lu + + * elf32-i386.c (elf_backend_add_symbol_hook): Defined for Intel + MCU. + +2016-05-05 H.J. Lu + + * elf32-i386.c (elf_i386_convert_load): Extract the GOT load + conversion to ... + (elf_i386_convert_load_reloc): This. New function. + * elf64-x86-64.c (elf_x86_64_convert_load): Extract the GOT load + conversion to ... + (elf_x86_64_convert_load_reloc): This. New function. + +2016-05-05 H.J. Lu + + * elf32-i386.c (elf_i386_check_tls_transition): Remove abfd. + Don't check if contents == NULL. + (elf_i386_tls_transition): Add from_relocate_section. Check + from_relocate_section instead of contents != NULL. Update + elf_i386_check_tls_transition call. + (elf_i386_check_relocs): Cache the section contents if + keep_memory is FALSE. Pass FALSE as from_relocate_section to + elf_i386_tls_transition. + (elf_i386_relocate_section): Pass TRUE as from_relocate_section + to elf_i386_tls_transition. + (elf_backend_caches_rawsize): New. + * elf64-x86-64.c (elf_x86_64_check_tls_transition): Don't check + if contents == NULL. + (elf_x86_64_tls_transition): Add from_relocate_section. Check + from_relocate_section instead of contents != NULL. + (elf_x86_64_check_relocs): Cache the section contents if + keep_memory is FALSE. Pass FALSE as from_relocate_section to + elf_x86_64_tls_transition. + (elf_x86_64_relocate_section): Pass TRUE as from_relocate_section + to elf_x86_64_tls_transition. + (elf_backend_caches_rawsize): New. + +2016-05-03 Maciej W. Rozycki + + PR 10549 + * elfxx-mips.c (_bfd_mips_elf_add_symbol_hook): Handle + STB_GNU_UNIQUE. + +2016-05-03 Jiong Wang + + * bfd-in.h (bfd_elf64_aarch64_set_options): Update prototype. + * bfd-in2.h (bfd_elf64_aarch64_set_options): Likewise. + * elfnn-aarch64.c (bfd_elfNN_aarch64_set_options): Initialize + no_apply_dynamic_relocs. + (elfNN_aarch64_final_link_relocate): Apply absolute relocations even though + dynamic relocations generated. + +2016-04-29 H.J. Lu + + * elf32-i386.c (elf_i386_size_dynamic_sections): Move interp + setting to ... + (elf_i386_create_dynamic_sections): Here. + * elf64-x86-64.c (elf_x86_64_size_dynamic_sections): Move + interp setting to ... + (elf_x86_64_create_dynamic_sections): Here. + +2016-04-29 H.J. Lu + + * elf32-i386.c (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Take GOT_RELOC + and replace (EH)->has_got_reloc with GOT_RELOC. + (elf_i386_fixup_symbol): Pass has_got_reloc to + UNDEFINED_WEAK_RESOLVED_TO_ZERO. + (elf_i386_allocate_dynrelocs): Likewise. + (elf_i386_relocate_section): Likewise. + (elf_i386_finish_dynamic_symbol): Likewise. + (elf_i386_convert_load): Pass TRUE to + UNDEFINED_WEAK_RESOLVED_TO_ZERO. + * elf64-x86-64.c (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Take + GOT_RELOC and replace (EH)->has_got_reloc with GOT_RELOC. + (elf_x86_64_fixup_symbol): Pass has_got_reloc to + UNDEFINED_WEAK_RESOLVED_TO_ZERO. + (elf_x86_64_allocate_dynrelocs): Likewise. + (elf_x86_64_relocate_section): Likewise. + (elf_x86_64_finish_dynamic_symbol): Likewise. + (elf_x86_64_convert_load): Pass TRUE to + UNDEFINED_WEAK_RESOLVED_TO_ZERO. + +2016-04-29 H.J. Lu + + * elf32-i386.c (check_relocs_failed): New. + (elf_i386_check_relocs): Set check_relocs_failed on error. + (elf_i386_relocate_section): Skip if check_relocs failed. + +2016-04-29 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_check_relocs): Set + check_relocs_failed on error. + +2016-04-29 Nick Clifton + + PR 19938 + * elf-bfd.h (struct elf_backend_data): Rename + elf_backend_set_special_section_info_and_link to + elf_backend_copy_special_section_fields. + * elfxx-target.h: Likewise. + * elf.c (section_match): Ignore the SHF_INFO_LINK flag when + comparing section flags. + (copy_special_section_fields): New function. + (_bfd_elf_copy_private_bfd_data): Copy the EI_ABIVERSION field. + Perform two scans over special sections. The first one looks for + a direct mapping between the output section and an input section. + The second scan looks for a possible match based upon section + characteristics. + * elf32-arm.c (elf32_arm_copy_special_section_fields): New + function. Handle setting the sh_link field of SHT_ARM_EXIDX + sections. + * elf32-i386.c (elf32_i386_set_special_info_link): Rename to + elf32_i386_copy_solaris_special_section_fields. + * elf32-sparc.c (elf32_sparc_set_special_section_info_link): + Rename to elf32_sparc_copy_solaris_special_section_fields. + * elf64-x86-64.c (elf64_x86_64_set_special_info_link): Rename to + elf64_x86_64_copy_solaris_special_section_fields. + +2016-04-28 Nick Clifton + + * po/zh_CN.po: Updated Chinese (simplified) translation. + +2016-04-27 H.J. Lu + + PR ld/20006 + * elf64-x86-64.c (elf_x86_64_convert_load): Skip debug sections + when estimating distances between output sections. + +2016-04-27 Alan Modra + + * elflink.c (_bfd_elf_is_start_stop): New function. + (_bfd_elf_gc_mark_rsec): Use it. + * elf-bfd.h (_bfd_elf_is_start_stop): Declare. + +2016-04-26 Trevor Saunders + + * elf32-rx.c (rx_set_section_contents): Avoid arithmetic on void *. + * mmo.c (mmo_get_section_contents): Likewise. + (mmo_set_section_contents): Likewise. + +2016-04-26 H.J. Lu + + * elf-bfd.h (elf_link_hash_table): Update comments for + dynsymcount. + * elflink.c (_bfd_elf_link_renumber_dynsyms): Always count for + the unused NULL entry at the head of dynamic symbol table. + (bfd_elf_size_dynsym_hash_dynstr): Remove dynsymcount != 0 + checks. + +2016-04-21 H.J. Lu + + * elflink.c (_bfd_elf_link_create_dynstrtab): Exclude linker + created file from dynobj. + +2016-04-21 H.J. Lu + + * elflink.c (_bfd_elf_link_create_dynstrtab): Set dynobj to a + normal input file if possible. + +2016-04-21 Nick Clifton + + * aout-adobe.c: Use _bfd_generic_link_check_relocs. + * aout-target.h: Likewise. + * aout-tic30.c: Likewise. + * binary.c: Likewise. + * bout.c: Likewise. + * coff-alpha.c: Likewise. + * coff-rs6000.c: Likewise. + * coff64-rs6000.c: Likewise. + * coffcode.h: Likewise. + * i386msdos.c: Likewise. + * i386os9k.c: Likewise. + * ieee.c: Likewise. + * ihex.c: Likewise. + * libbfd-in.h: Likewise. + * libecoff.h: Likewise. + * mach-o-target.c: Likewise. + * mmo.c: Likewise. + * nlm-target.h: Likewise. + * oasys.c: Likewise. + * pef.c: Likewise. + * plugin.c: Likewise. + * ppcboot.c: Likewise. + * som.c: Likewise. + * srec.c: Likewise. + * tekhex.c: Likewise. + * versados.c: Likewise. + * vms-alpha.c: Likewise. + * xsym.c: Likewise. + * elfxx-target.h: Use _bfd_elf_link_check_relocs. + * linker.c (bfd_link_check_relocs): New function. + (_bfd_generic_link_check_relocs): New function. + * targets.c (BFD_JUMP_TABLE_LINK): Add initialization of + _bfd_link_check_relocs field. + (struct bfd_target)L Add _bfd_link_check_relocs field. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + +2016-04-20 H.J. Lu + + * elf32-i386.c (elf_i386_gc_sweep_hook): Removed. + (elf_backend_gc_sweep_hook): Likewise. + * elf64-x86-64.c (elf_x86_64_gc_sweep_hook): Likewise. + (elf_backend_gc_sweep_hook): Likewise. + +2016-04-20 H.J. Lu + + * elflink.c (_bfd_elf_link_check_relocs): Don't check relocations + in excluded sections + +2016-04-20 H.J. Lu + + PR ld/19969 + * elf64-x86-64.c (check_relocs_failed): New. + (elf_x86_64_need_pic): Moved before elf_x86_64_check_relocs. + Support relocation agaist local symbol. Set check_relocs_failed. + (elf_x86_64_check_relocs): Use elf_x86_64_need_pic. Check + R_X86_64_32 relocation overflow. + (elf_x86_64_relocate_section): Skip if check_relocs failed. + Update one elf_x86_64_need_pic and remove one elf_x86_64_need_pic. + +2016-04-20 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Call + _bfd_elf_create_ifunc_sections only for STT_GNU_IFUNC symbol. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + +2016-04-20 H.J. Lu + + * elf-bfd.h (_bfd_elf_link_check_relocs): New. + * elflink.c (_bfd_elf_link_check_relocs): New function. + (elf_link_add_object_symbols): Call _bfd_elf_link_check_relocs + if check_relocs_after_open_input is FALSE. + +2016-04-20 Trevor Saunders + + * cache.c: Update old style function definitions. + * elf32-m68k.c: Likewise. + * elf64-mmix.c: Likewise. + * stab-syms.c: Likewise. + +2016-04-20 Trevor Saunders + + * elf32-arm.c (put_thumb2_insn): Change argument type to bfd_byte *. + +2016-04-15 H.J. Lu + + * Makefile.in: Regenerated with automake 1.11.6. + * aclocal.m4: Likewise. + * doc/Makefile.in: Likewise. + +2016-04-14 Andrew Burgess + + * reloc.c: Add BFD_RELOC_ARC_NPS_CMEM16 entry. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + * elf32-arc.c: Add 'opcode/arc.h' include. + (struct arc_relocation_data): Add symbol_name. + (arc_special_overflow_checks): New function. + (arc_do_relocation): Use arc_special_overflow_checks, reindent as + required, add an extra comment. + (elf_arc_relocate_section): Setup symbol_name in reloc_data. + +2016-04-14 Andrew Burgess + + * elf32-arc.c (tls_got_entries): Add 'TLS_GOT_' prefix to all + entries. + (elf_arc_relocate_section): Update enum uses. + (elf_arc_check_relocs): Likewise. + (elf_arc_finish_dynamic_symbol): Likewise. + +2016-04-14 H.J. Lu + + * elf.c (_bfd_elf_copy_private_bfd_data): Replace "link" with + "sh_link". + +2016-04-14 Nick Clifton + + PR target/19938 + * elf-bbfd.h (struct elf_backend_data): New field: + elf_strtab_flags. + New field: elf_backend_set_special_section_info_and_link + * elfxx-target.h (elf_backend_strtab_flags): Define if not already + defined. + (elf_backend_set_special_section_info_and_link): Define if not + already defined. + (elfNN_bed): Use elf_backend_set_special_section_info_and_link and + elf_backend_strtab_flags macros to initialise fields in structure. + * elf.c (_bfd_elf_make_section_from_shdr): Check for SHF_STRINGS + being set even if SHF_MERGE is not set. + (elf_fake_sections): Likewise. + (section_match): New function. Matches two ELF sections based + upon fixed characteristics. + (find_link): New function. Locates a section in a BFD that + matches a section in a different BFD. + (_bfd_elf_copy_private_bfd_data): Copy the sh_info and sh_link + fields of reserved sections. + (bfd_elf_compute_section_file_positions): Set the flags for the + .shstrtab section based upon the elf_strtab_flags field in the + elf_backend_data structure. + (swap_out_syms): Likewise for the .strtab section. + * elflink.c (bfd_elf_final_link): Set the flags for the + .strtab section based upon the elf_strtab_flags field in the + elf_backend_data structure. + * elf32-i386.c (elf32_i386_set_special_info_link): New function. + (elf_backend_strtab_flags): Set to SHF_STRINGS for Solaris + targets. + (elf_backend_set_special_section_info_and_link): Define for + Solaris targets. + * elf32-sparc.c: Likewise. + * elf64-x86-64.c: Likewise. + +2016-04-11 H.J. Lu + + PR ld/19939 + * elf-bfd.h (_bfd_elf_allocate_ifunc_dyn_relocs): Add a pointer + to bfd_boolean. + * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Updated. + Set *readonly_dynrelocs_against_ifunc_p to TRUE if dynamic reloc + applies to read-only section. + * elf32-i386.c (elf_i386_link_hash_table): Add + readonly_dynrelocs_against_ifunc. + (elf_i386_allocate_dynrelocs): Updated. + (elf_i386_size_dynamic_sections): Issue an error for read-only + segment with dynamic IFUNC relocations only if + readonly_dynrelocs_against_ifunc is TRUE. + * elf64-x86-64.c (elf_x86_64_link_hash_table): Add + readonly_dynrelocs_against_ifunc. + (elf_x86_64_allocate_dynrelocs): Updated. + (elf_x86_64_size_dynamic_sections): Issue an error for read-only + segment with dynamic IFUNC relocations only if + readonly_dynrelocs_against_ifunc is TRUE. + * elfnn-aarch64.c (elfNN_aarch64_allocate_ifunc_dynrelocs): + Updated. + +2016-04-06 Thomas Preud'homme + + * elf32-arm.c (elf32_arm_size_stubs): Move error_ret_free_local to be + a fall through from error_ret_free_internal. Free local_syms in + error_ret_free_local if allocated from bfd_elf_get_elf_syms (). + +2016-04-05 Cupertino Miranda + + * elf32-arc.c (plt_do_relocs_for_symbol): Changed. + (relocate_plt_for_entry): Likewise. + +2016-04-05 Cupertino Miranda + + * elf32-arc.c (elf_arc_check_relocs): Changed + +2016-04-05 Cupertino Miranda + + * elf32-arc.c (name_for_global_symbol): Changed assert. + (get_replace_function): Created.: + (struct arc_relocation_data): Changed to signed types. + (defines S, L, P, PDATA): Casted to signed type. + (defines SECTSTART, _SDA_BASE_, TLS_REL): Likewise. + (PRINT_DEBUG_RELOC_INFO_BEFORE): Changed. + (arc_do_relocation): Changed. + +2016-04-05 Cupertino Miranda + + * elf32-arc.c (name_for_global_symbol): Added assert to check for + symbol index. + (elf_arc_relocate_section): Added and changed asserts, validating + the synamic symbol index. + (elf_arc_finish_dynamic_symbol): Do not fill the dynamic + relocation if symbol has dynindx set to -1. + +2016-04-05 Maciej W. Rozycki + + * elflink.c (elf_link_add_object_symbols): Always turn hidden + and internal symbols which have a dynamic index into local + ones. + +2016-04-04 Nick Clifton + + PR 19872 + * dwarf2.c (parse_comp_unit): Skip warning about unrecognised + version number if the version is zero. + +2016-04-01 Alan Modra + + PR 19886 + * elflink.c (on_needed_list): Recursively check needed status. + (elf_link_add_object_symbols): Adjust. + +2016-03-30 Senthil Kumar Selvaraj + + * elf32-avr.c (avr_elf32_load_records_from_section): Free + internal_relocs only if they aren't cached. + +2016-03-29 Nick Clifton + + PR 17334 + * elf32-bfin.c (elf32_bfinfdpic_finish_dynamic_sections): Relax + assertion on the size of the got section to allow it to be bigger + than the number of relocs. + +2016-03-29 Toni Spets + + PR 19878 + * coffcode.h (coff_write_object_contents): Revert accidental + 2014-11-10 change. + +2016-03-22 Alan Modra + + PR 19850 + * dwarf2.c (read_attribute_value): Skip info_ptr check for + DW_FORM_flag_present. + +2016-03-22 Nick Clifton + + * cpu-v850_rh850.c (arch_info_struct): Restore v850-rh850 as an + architecture name for backwards compatibility. + + * peXXigen.c (_bfd_XXi_write_codeview_record): Fix possible + unbounded stack use. + + * warning.m4 (GCC_WARN_CFLAGS): Only add -Wstack-usage if using a + sufficiently recent version of GCC. + * configure: Regenerate. + +2016-03-22 Alan Modra + + PR 19851 + * plugin.c (try_load_plugin): Avoid -Wstack-usage warning. + +2016-03-21 Andrew Burgess + + * archures.c (bfd_mach_arc_nps400): Define. + * bfd-in2.h: Regenerate. + * cpu-arc.c (arch_info_struct): New entry for nps400, renumber + some existing entries to make space. + * elf32-arc.c (arc_elf_object_p): Add nps400 case. + (arc_elf_final_write_processing): Likewise. + +2016-03-21 Andrew Burgess + + * elf32-arc.c (arc_elf_print_private_bfd_data): Remove use of + EF_ARC_CPU_GENERIC. + (arc_elf_final_write_processing): Don't bother setting cpu field + in e_flags, this will have been set elsewhere. + +2016-03-21 Andrew Burgess + + * elf32-arc.c (arc_elf_final_write_processing): Switch to using + EF_ARC_MACH_MSK. + +2016-03-21 Nick Clifton + + * warning.m4 (GCC_WARN_CFLAGS): Add -Wstack-usage=262144 + * configure: Regenerate. + * elf32-m68hc1x.c (elf32_m68hc11_relocate_section): Replace use of + alloca with call to xmalloc. + * elf32-nds32.c: Likewise. + * elf64-hppa.c: Likewise. + * elfxx-mips.c: Likewise. + * pef.c: Likewise. + * pei-x86_64.c: Likewise. + * som.c: Likewise. + * xsym.c: Likewise. + +2016-03-15 H.J. Lu + + PR ld/19827 + * elf32-i386.c (elf_i386_check_relocs): Bind defined symbol + locally in PIE. + (elf_i386_relocate_section): Likewise. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + (elf_x86_64_relocate_section): Likewise. + +2016-03-15 H.J. Lu + + PR ld/19807 + * elf64-x86-64.c (elf_x86_64_relocate_section): Check + no_reloc_overflow_check to diable R_X86_64_32/R_X86_64_32S + relocation overflow check. + +2016-03-14 H.J. Lu + + * bfd-in2.h: Regenerated. + +2016-03-11 Dan Gissel + + PR 19713 + * elf.c (_bfd_elf_section_offset): Ensure that the returned offset + uses bytes not octets. + * elflink.c (resolve_section): Likewise. + Add a bfd parameter. + (eval_section): Pass the input_bfd to resolve_section. + (bfd_elf_perform_complex_relocation): Convert byte offset to + octets before read and writing values. + (elf_link_input_bfd): Add byte to octet conversions. + (elf_reloc_link_order): Likewise. + (elf_fixup_link_order): Likewise. + (bfd_elf_final_link): Likewise. + * reloc.c (_bfd_final_link_relocate): Likewise. + * syms.c (_bfd_stab_section_find_nearest_line): Likewise. + +2016-03-10 Nick Clifton + + * config.bfd: Mark the i370 target as obsolete. + +2016-03-09 Pedro Alves + + * cpu-v850.c (N): Append ":old-gcc-abi" instead of " (using old + gcc ABI)" to printable name. + * cpu-v850_rh850.c (bfd_v850_rh850_arch): Use "v850:rh850" instead + of "v850-rh850" as printable name. + +2016-03-09 Leon Winter + + PR ld/19623 + * cofflink.c (_bfd_coff_generic_relocate_section): Do not apply + relocations against absolute symbols. + +2016-03-09 Alan Modra + + PR binutils/19775 + * coff-alpha.c (alpha_ecoff_openr_next_archived_file): Allow zero + length elements in the archive. + +2016-03-08 H.J. Lu + + PR ld/19789 + * elflink.c (elf_link_add_object_symbols): Create dynamic sections + for -E/--dynamic-list only when not relocatable. + +2016-03-08 H.J. Lu + + PR ld/19784 + * elf32-i386.c (elf_i386_check_relocs): Increment PLT reference + count for locally defined local IFUNC symbols in shared object. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + +2016-03-08 H.J. Lu + + PR ld/19579 + * elflink.c (_bfd_elf_merge_symbol): Group common symbol checking + together. + +2016-03-08 Cupertino Miranda + Andrew Burgess + + * elf32-arc.c (arc_bfd_get_32): Becomes an alias for bfd_get_32. + (arc_bfd_put_32): Becomes an alias for bfd_put_32. + (arc_elf_howto_init): Added assert to validate relocations. + (get_middle_endian_relocation): Delete. + (middle_endian_convert): New function. + (ME): Redefine, now does nothing. + (IS_ME): New define. + (arc_do_relocation): Extend the attached 'ARC_RELOC_HOWTO' + definition to call middle_endian_convert. Add a new local + variable and make use of this throughout. Added call to + arc_bfd_get_8 and arc_bfd_put_8 for 8 bit relocations. + +2016-03-07 Nick Clifton + + PR binutils/19775 + * archive.c (bfd_generic_openr_next_archived_file): Allow zero + length elements in the archive. + +2016-03-07 Jiong Wang + + * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Always create .got + section if the symbol "_GLOBAL_OFFSET_TABLE_" is referenced. + +2016-03-04 H.J. Lu + + PR ld/19579 + * elflink.c (_bfd_elf_merge_symbol): Treat common symbol in + executable as definition if the new definition comes from a + shared library. + +2016-03-02 Alan Modra + + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in: Regenerate. + +2016-02-29 Cupertino Miranda + + * elf32-arc.c (elf_arc_relocate_section): Added rules to fix the + relocation addend when sections get merged. + +2016-02-29 Cupertino Miranda + + * elf32-arc.c (arc_elf_final_write_processing): Add condition to + the flag change. + (elf_arc_relocate_section): Fixes and conditions to support PIE. + Assert for code sections dynamic relocs. + +2016-02-26 Renlin Li + + * elfnn-aarch64.c (elfNN_aarch64_howto_table): Fix signed overflow + check for MOVW_SABS_G0, MOVW_SABS_G1, MOVW_SABS_G2. + +2016-02-26 H.J. Lu + + PR ld/19609 + * elf32-i386.c (elf_i386_convert_load): Convert to R_386_32 for + load with locally bound symbols if PIC is false or there is no + base register. Optimize branch to 0 if PIC is false. + (elf_i386_relocate_section): Don't generate dynamic relocations + against undefined weak symbols if PIC is false. + * elf64-x86-64.c (elf_x86_64_convert_load): Disable optimization + if we can't estimate relocation overflow with --no-relax. + Convert to R_X86_64_32S/R_X86_64_32 for load with locally bound + symbols if PIC is false. Optimize branch to 0 if PIC is false. + (elf_x86_64_relocate_section): Don't generate dynamic relocations + against undefined weak symbols if PIC is false. + +2016-02-26 H.J. Lu + + PR ld/19645 + * bfd.c (bfd): Change flags to 20 bits. + (BFD_CONVERT_ELF_COMMON): New. + (BFD_USE_ELF_STT_COMMON): Likewise. + (BFD_FLAGS_SAVED): Add BFD_CONVERT_ELF_COMMON and + BFD_USE_ELF_STT_COMMON. + (BFD_FLAGS_FOR_BFD_USE_MASK): Likewise. + * configure.ac: Remove --enable-elf-stt-common. + * elf.c (swap_out_syms): Choose STT_COMMON or STT_OBJECT for + common symbol depending on BFD_CONVERT_ELF_COMMON and + BFD_USE_ELF_STT_COMMON. + * elfcode.h (elf_slurp_symbol_table): Set BSF_ELF_COMMON for + STT_COMMON. + * elflink.c (bfd_elf_link_mark_dynamic_symbol): Also check + STT_COMMON. + (elf_link_convert_common_type): New function. + (elf_link_output_extsym): Choose STT_COMMON or STT_OBJECT for + common symbol depending on BFD_CONVERT_ELF_COMMON and + BFD_USE_ELF_STT_COMMON. Set sym.st_info after sym.st_shndx. + * elfxx-target.h (TARGET_BIG_SYM): Add BFD_CONVERT_ELF_COMMON + and BFD_USE_ELF_STT_COMMON to object_flags. + (TARGET_LITTLE_SYM): Likewise. + * syms.c (BSF_KEEP_G): Renamed to ... + (BSF_ELF_COMMON): This. + * bfd-in2.h: Regenerated. + * config.in: Likewise. + * configure: Likewise. + +2016-02-26 H.J. Lu + + PR ld/19636 + PR ld/19704 + PR ld/19719 + * elf32-i386.c (UNDEFINED_WEAK_RESOLVED_TO_ZERO): New. + (elf_i386_link_hash_entry): Add has_got_reloc and + has_non_got_reloc. + (elf_i386_link_hash_table): Add interp. + (elf_i386_link_hash_newfunc): Initialize has_got_reloc and + has_non_got_reloc. + (elf_i386_copy_indirect_symbol): Copy has_got_reloc and + has_non_got_reloc. + (elf_i386_check_relocs): Set has_got_reloc and has_non_got_reloc. + (elf_i386_fixup_symbol): New function. + (elf_i386_pie_finish_undefweak_symbol): Likewise. + (elf_i386_allocate_dynrelocs): Don't allocate space for dynamic + relocations and discard relocations against resolved undefined + weak symbols in executable. Don't make resolved undefined weak + symbols in executable dynamic. Keep dynamic non-GOT/non-PLT + relocation against undefined weak symbols in PIE. + (elf_i386_size_dynamic_sections): Set interp to .interp section. + (elf_i386_relocate_section): Don't generate dynamic relocations + against resolved undefined weak symbols in PIE, except for + R_386_PC32. + (elf_i386_finish_dynamic_symbol): Keep PLT/GOT entries without + dynamic PLT/GOT relocations for resolved undefined weak symbols. + Don't generate dynamic relocation against resolved undefined weak + symbol in executable. + (elf_i386_finish_dynamic_sections): Call + elf_i386_pie_finish_undefweak_symbol on all symbols in PIE. + (elf_backend_fixup_symbol): New. + * elf64-x86-64.c (UNDEFINED_WEAK_RESOLVED_TO_ZERO): New. + (elf_x86_64_link_hash_entry): Add has_got_reloc and + has_non_got_reloc. + (elf_x86_64_link_hash_table): Add interp. + (elf_x86_64_link_hash_newfunc): Initialize has_got_reloc and + has_non_got_reloc. + (elf_x86_64_copy_indirect_symbol): Copy has_got_reloc and + has_non_got_reloc. + (elf_x86_64_check_relocs): Set has_got_reloc and + has_non_got_reloc. + (elf_x86_64_fixup_symbol): New function. + (elf_x86_64_pie_finish_undefweak_symbol): Likewise. + (elf_x86_64_allocate_dynrelocs): Don't allocate space for dynamic + relocations and discard relocations against resolved undefined + weak symbols in executable. Don't make resolved undefined weak + symbols in executable dynamic. + (elf_x86_64_size_dynamic_sections): Set interp to .interp section. + (elf_x86_64_relocate_section): Check relocation overflow for + dynamic relocations against unresolved weak undefined symbols. + Don't generate dynamic relocations against resolved weak + undefined symbols in PIE. + (elf_x86_64_finish_dynamic_symbol): Keep PLT/GOT entries without + dynamic PLT/GOT relocations for resolved undefined weak symbols. + Don't generate dynamic relocation against resolved undefined weak + symbol in executable. + (elf_x86_64_finish_dynamic_sections): Call + elf_x86_64_pie_finish_undefweak_symbol on all symbols in PIE. + (elf_backend_fixup_symbol): New. + +2016-02-26 Alan Modra + + * elf64-ppc.c (create_linkage_sections): Create sfpr when + save_restore_funcs, rest of sections when not relocatable. + (ppc64_elf_init_stub_bfd): Always call create_linkage_sections. + (sfpr_define): Define all symbols on emitted code. + (ppc64_elf_func_desc_adjust): Adjust for sfpr now being created + when relocatable. Move sfpr_define loop earlier. + +2016-02-24 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_need_pic): New function. + (elf_x86_64_relocate_section): Use it. Replace + x86_64_elf_howto_table[r_type] with howto. + +2016-02-24 H.J. Lu + + PR ld/19698 + * elflink.c (bfd_elf_record_link_assignment): Set versioned if + symbol version is unknown. + +2016-02-24 H.J. Lu + + * elf32-i386.c (elf_i386_allocate_dynrelocs): Set plt_got.offset + to (bfd_vma) -1 when setting needs_plt to 0. + * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise. + +2016-02-23 H.J. Lu + + * elflink.c (bfd_elf_record_link_assignment): Check for shared + library, instead of PIC, and don't check PDE when making linker + assigned symbol dynamic. + +2016-02-23 Faraz Shahbazker + + * bfd/elfxx-mips.c (_bfd_mips_post_process_headers): Increment + ABIVERSION for non-executable stack. + +2016-02-23 Rich Felker + + PR target/19516 + * elf32-microblaze.c (microblaze_elf_finish_dynamic_symbol): + Always produce a RELATIVE reloc for a local symbol. + +2016-02-23 Hans-Peter Nilsson + + Fix test-case ld-elf/pr19617b + * elf32-cris.c (elf_cris_discard_excess_program_dynamics): Don't + discard unused non-function symbols when --dynamic-list-data. + +2016-02-22 H.J. Lu + + * elflink.c (_bfd_elf_link_renumber_dynsyms): Always create the + dynsym section, even if it is empty, with dynamic sections. + +2016-02-22 H.J. Lu + + * syms.c: Remove BSF_COMMON from comments. + * bfd-in2.h: Regenerated. + +2016-02-22 Jiong Wang + + * elfnn-aarch64. (aarch64_type_of_stub): Remove redundation calcuation + for destination. Remove useless function parameters. + (elfNN_aarch64_size_stubs): Update parameters for aarch64_type_of_stub. + +2016-02-19 Nick Clifton + + PR ld/19629 + * aoutx.h (aout_link_add_symbols): Check for out of range string + table offsets. + + PR ld/19628 + * reloc.c (bfd_generic_get_relocated_section_contents): Stop + processing if we encounter a reloc without an associated symbol. + +2016-02-18 H.J. Lu + + PR ld/19617 + * elflink.c (elf_link_add_object_symbols): Always create dynamic + sections for -E/--dynamic-list. + +2016-02-17 H.J. Lu + + * elf64-x86-64.c (elf_backend_omit_section_dynsym): New. Defined + to bfd_true. + +2016-02-16 Joseph Myers + + * plugin.c (plugin_vec): Set match priority to 255. + * format.c (bfd_check_format_matches) [BFD_SUPPORTS_PLUGINS]: When + matching against the plugin vector, take priority from there not + from TEMP. + +2016-02-15 Nick Clifton + + * elf-bfd.h (struct bfd_elf_special_section): Use unsigned values + for length and type fields. Use a signed value for the + suffix_length field. + +2016-02-10 H.J. Lu + + PR ld/19601 + * elf32-i386.c (elf_i386_relocate_section): Mask off the least + significant bit in GOT offset for R_386_GOT32X. + +2016-02-10 Nick Clifton + + PR 19405 + * elf32-nios2.c (nios2_elf32_install_imm16): Allow for signed + immediate values. + * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Limit the + number of messages about FDE encoding preventing .eh_frame_hdr + generation. + 2016-02-09 Nick Clifton * oasys.c (oasys_archive_p): Fix indentation. diff --git a/bfd/Makefile.in b/bfd/Makefile.in index 7aecfc9..7283ed9 100644 --- a/bfd/Makefile.in +++ b/bfd/Makefile.in @@ -1,9 +1,9 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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. @@ -36,6 +36,23 @@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -117,6 +134,12 @@ am__nobase_list = $(am__nobase_strip_setup); \ am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } am__installdirs = "$(DESTDIR)$(bfdlibdir)" \ "$(DESTDIR)$(bfdincludedir)" LTLIBRARIES = $(bfdlib_LTLIBRARIES) $(noinst_LTLIBRARIES) @@ -155,6 +178,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h HEADERS = $(bfdinclude_HEADERS) @@ -260,6 +288,7 @@ TDEFINES = @TDEFINES@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ +WARN_WRITE_STRINGS = @WARN_WRITE_STRINGS@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -1159,7 +1188,7 @@ all: $(BUILT_SOURCES) config.h .SUFFIXES: .SUFFIXES: .c .lo .o .obj -am--refresh: +am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ @@ -1195,10 +1224,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status @rm -f stamp-h1 @@ -1219,7 +1246,6 @@ 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 \ @@ -1227,6 +1253,8 @@ install-bfdlibLTLIBRARIES: $(bfdlib_LTLIBRARIES) else :; fi; \ done; \ test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(bfdlibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bfdlibdir)" || exit 1; \ 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)"; \ } @@ -1257,7 +1285,7 @@ clean-noinstLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done -libbfd.la: $(libbfd_la_OBJECTS) $(libbfd_la_DEPENDENCIES) +libbfd.la: $(libbfd_la_OBJECTS) $(libbfd_la_DEPENDENCIES) $(EXTRA_libbfd_la_DEPENDENCIES) $(libbfd_la_LINK) $(am_libbfd_la_rpath) $(libbfd_la_OBJECTS) $(libbfd_la_LIBADD) $(LIBS) mostlyclean-compile: @@ -1552,6 +1580,7 @@ distclean-compile: @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)/netbsd-core.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@ @@ -1652,8 +1681,11 @@ distclean-libtool: -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=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bfdincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bfdincludedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -1667,9 +1699,7 @@ 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 + dir='$(DESTDIR)$(bfdincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -1825,10 +1855,15 @@ install-am: all-am installcheck: installcheck-recursive install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) diff --git a/bfd/aclocal.m4 b/bfd/aclocal.m4 index d3243c6..43ff59b 100644 --- a/bfd/aclocal.m4 +++ b/bfd/aclocal.m4 @@ -1,7 +1,8 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- +# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 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. @@ -19,12 +20,15 @@ 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. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 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 1 + # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been @@ -34,7 +38,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], +m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -50,19 +54,21 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl +[AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 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 1 + # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. @@ -144,14 +150,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 10 +# serial 12 # 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, @@ -191,6 +197,7 @@ AC_CACHE_CHECK([dependency style of $depcc], # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. + rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. @@ -255,7 +262,7 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; - msvisualcpp | msvcmsys) + msvc7 | msvc7msys | 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. @@ -320,10 +327,13 @@ AC_DEFUN([AM_DEP_TRACK], if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' + am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- @@ -545,12 +555,15 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008, 2011 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 1 + # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. @@ -569,8 +582,8 @@ 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, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, +# 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -590,7 +603,7 @@ AC_DEFUN([AM_MAINTAINER_MODE], [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]) +AC_MSG_CHECKING([whether to enable 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 @@ -701,12 +714,15 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006, 2011 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 1 + # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. @@ -729,13 +745,14 @@ esac # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 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_MANGLE_OPTION(NAME) # ----------------------- @@ -743,13 +760,13 @@ AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) -# ------------------------------ +# -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- +# ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) @@ -825,12 +842,14 @@ Check your system clock]) fi AC_MSG_RESULT(yes)]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 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 1 + # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't @@ -853,13 +872,13 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008, 2010 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 +# serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- @@ -868,13 +887,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])]) 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. +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -896,10 +915,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) diff --git a/bfd/aout-adobe.c b/bfd/aout-adobe.c index 9556c89..57fdce7 100644 --- a/bfd/aout-adobe.c +++ b/bfd/aout-adobe.c @@ -472,6 +472,7 @@ aout_adobe_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED, _bfd_generic_copy_link_hash_symbol_type #define aout_32_bfd_final_link _bfd_generic_final_link #define aout_32_bfd_link_split_section _bfd_generic_link_split_section +#define aout_32_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target aout_adobe_vec = { diff --git a/bfd/aout-target.h b/bfd/aout-target.h index 7d96260..c7f5b1b 100644 --- a/bfd/aout-target.h +++ b/bfd/aout-target.h @@ -542,6 +542,10 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info) #define MY_bfd_link_split_section _bfd_generic_link_split_section #endif +#ifndef MY_bfd_link_check_relocs +#define MY_bfd_link_check_relocs _bfd_generic_link_check_relocs +#endif + #ifndef MY_bfd_copy_private_bfd_data #define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data #endif diff --git a/bfd/aout-tic30.c b/bfd/aout-tic30.c index f73b7e4..468944c 100644 --- a/bfd/aout-tic30.c +++ b/bfd/aout-tic30.c @@ -997,6 +997,10 @@ tic30_aout_set_arch_mach (bfd *abfd, #define MY_bfd_link_split_section _bfd_generic_link_split_section #endif +#ifndef MY_bfd_link_check_relocs +#define MY_bfd_link_check_relocs _bfd_generic_link_check_relocs +#endif + #ifndef MY_bfd_copy_private_bfd_data #define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data #endif diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 665afe4..be0126a 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -733,9 +733,19 @@ NAME (aout, machine_type) (enum bfd_architecture arch, || machine == bfd_mach_sparc_v8plus || machine == bfd_mach_sparc_v8plusa || machine == bfd_mach_sparc_v8plusb + || machine == bfd_mach_sparc_v8plusc + || machine == bfd_mach_sparc_v8plusd + || machine == bfd_mach_sparc_v8pluse + || machine == bfd_mach_sparc_v8plusv + || machine == bfd_mach_sparc_v8plusm || machine == bfd_mach_sparc_v9 || machine == bfd_mach_sparc_v9a - || machine == bfd_mach_sparc_v9b) + || machine == bfd_mach_sparc_v9b + || machine == bfd_mach_sparc_v9c + || machine == bfd_mach_sparc_v9d + || machine == bfd_mach_sparc_v9e + || machine == bfd_mach_sparc_v9v + || machine == bfd_mach_sparc_v9m) arch_flags = M_SPARC; else if (machine == bfd_mach_sparc_sparclet) arch_flags = M_SPARCLET; @@ -3002,7 +3012,11 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info) if ((type & N_STAB) != 0) continue; + /* PR 19629: Corrupt binaries can contain illegal string offsets. */ + if (GET_WORD (abfd, p->e_strx) > obj_aout_external_string_size (abfd)) + return FALSE; name = strings + GET_WORD (abfd, p->e_strx); + value = GET_WORD (abfd, p->e_value); flags = BSF_GLOBAL; string = NULL; @@ -3060,6 +3074,9 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info) which this one really is. */ BFD_ASSERT (p + 1 < pend); ++p; + /* PR 19629: Corrupt binaries can contain illegal string offsets. */ + if (GET_WORD (abfd, p->e_strx) > obj_aout_external_string_size (abfd)) + return FALSE; string = strings + GET_WORD (abfd, p->e_strx); section = bfd_ind_section_ptr; flags |= BSF_INDIRECT; @@ -3093,6 +3110,9 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info) return TRUE; ++p; string = name; + /* PR 19629: Corrupt binaries can contain illegal string offsets. */ + if (GET_WORD (abfd, p->e_strx) > obj_aout_external_string_size (abfd)) + return FALSE; name = strings + GET_WORD (abfd, p->e_strx); section = bfd_und_section_ptr; flags |= BSF_WARNING; @@ -3725,9 +3745,8 @@ aout_link_reloc_link_order (struct aout_final_link_info *flaginfo, } else { - if (! ((*flaginfo->info->callbacks->unattached_reloc) - (flaginfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0))) - return FALSE; + (*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0); r_index = 0; } } @@ -3822,17 +3841,13 @@ aout_link_reloc_link_order (struct aout_final_link_info *flaginfo, case bfd_reloc_outofrange: abort (); case bfd_reloc_overflow: - if (! ((*flaginfo->info->callbacks->reloc_overflow) - (flaginfo->info, NULL, - (p->type == bfd_section_reloc_link_order - ? bfd_section_name (flaginfo->output_bfd, - pr->u.section) - : pr->u.name), - howto->name, pr->addend, NULL, NULL, (bfd_vma) 0))) - { - free (buf); - return FALSE; - } + (*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, NULL, + (p->type == bfd_section_reloc_link_order + ? bfd_section_name (flaginfo->output_bfd, + pr->u.section) + : pr->u.name), + howto->name, pr->addend, NULL, NULL, (bfd_vma) 0); break; } ok = bfd_set_section_contents (flaginfo->output_bfd, o, (void *) buf, @@ -4089,10 +4104,9 @@ aout_link_input_section_std (struct aout_final_link_info *flaginfo, name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*flaginfo->info->callbacks->unattached_reloc) - (flaginfo->info, name, input_bfd, input_section, - r_addr))) - return FALSE; + (*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, name, + input_bfd, input_section, r_addr); r_index = 0; } } @@ -4214,10 +4228,8 @@ aout_link_input_section_std (struct aout_final_link_info *flaginfo, name = h->root.root.string; else name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*flaginfo->info->callbacks->undefined_symbol) - (flaginfo->info, name, input_bfd, input_section, - r_addr, TRUE))) - return FALSE; + (*flaginfo->info->callbacks->undefined_symbol) + (flaginfo->info, name, input_bfd, input_section, r_addr, TRUE); } r = MY_final_link_relocate (howto, @@ -4249,11 +4261,9 @@ aout_link_input_section_std (struct aout_final_link_info *flaginfo, s = aout_reloc_index_to_section (input_bfd, r_index); name = bfd_section_name (input_bfd, s); } - if (! ((*flaginfo->info->callbacks->reloc_overflow) - (flaginfo->info, (h ? &h->root : NULL), name, - howto->name, (bfd_vma) 0, input_bfd, - input_section, r_addr))) - return FALSE; + (*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, r_addr); } break; } @@ -4431,10 +4441,9 @@ aout_link_input_section_ext (struct aout_final_link_info *flaginfo, name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*flaginfo->info->callbacks->unattached_reloc) - (flaginfo->info, name, input_bfd, input_section, - r_addr))) - return FALSE; + (*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, name, + input_bfd, input_section, r_addr); r_index = 0; } } @@ -4621,10 +4630,8 @@ aout_link_input_section_ext (struct aout_final_link_info *flaginfo, name = h->root.root.string; else name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*flaginfo->info->callbacks->undefined_symbol) - (flaginfo->info, name, input_bfd, input_section, - r_addr, TRUE))) - return FALSE; + (*flaginfo->info->callbacks->undefined_symbol) + (flaginfo->info, name, input_bfd, input_section, r_addr, TRUE); } if (r_type != (unsigned int) RELOC_SPARC_REV32) @@ -4668,11 +4675,10 @@ aout_link_input_section_ext (struct aout_final_link_info *flaginfo, s = aout_reloc_index_to_section (input_bfd, r_index); name = bfd_section_name (input_bfd, s); } - if (! ((*flaginfo->info->callbacks->reloc_overflow) - (flaginfo->info, (h ? &h->root : NULL), name, - howto_table_ext[r_type].name, - r_addend, input_bfd, input_section, r_addr))) - return FALSE; + (*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, (h ? &h->root : NULL), name, + howto_table_ext[r_type].name, + r_addend, input_bfd, input_section, r_addr); } break; } diff --git a/bfd/arc-got.h b/bfd/arc-got.h new file mode 100644 index 0000000..7c3cfd9 --- /dev/null +++ b/bfd/arc-got.h @@ -0,0 +1,513 @@ +/* ARC-specific support for 32-bit ELF + Copyright (C) 1994-2016 Free Software Foundation, Inc. + Contributed by Cupertino Miranda (cmiranda@synopsys.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. */ + +#ifndef ARC_GOT_H +#define ARC_GOT_H + +enum tls_type_e +{ + GOT_UNKNOWN = 0, + GOT_NORMAL, + GOT_TLS_GD, + GOT_TLS_IE, + GOT_TLS_LE +}; + +enum tls_got_entries +{ + TLS_GOT_NONE = 0, + TLS_GOT_MOD, + TLS_GOT_OFF, + TLS_GOT_MOD_AND_OFF +}; + +struct got_entry +{ + struct got_entry *next; + enum tls_type_e type; + bfd_vma offset; + bfd_boolean processed; + bfd_boolean created_dyn_relocation; + enum tls_got_entries existing_entries; +}; + +static struct got_entry ** +arc_get_local_got_ents (bfd * abfd) +{ + static struct got_entry **local_got_ents = NULL; + + if (local_got_ents == NULL) + { + size_t size; + Elf_Internal_Shdr *symtab_hdr = &((elf_tdata (abfd))->symtab_hdr); + + size = symtab_hdr->sh_info * sizeof (bfd_vma); + local_got_ents = (struct got_entry **) + bfd_alloc (abfd, sizeof (struct got_entry *) * size); + if (local_got_ents == NULL) + return FALSE; + + memset (local_got_ents, 0, sizeof (struct got_entry *) * size); + elf_local_got_ents (abfd) = local_got_ents; + } + + return local_got_ents; +} + +static struct got_entry * +got_entry_for_type (struct got_entry **list, + enum tls_type_e type) +{ + struct got_entry **p = list; + + while (*p != NULL) + { + if ((*p)->type == type) + return *p; + p = &((*p)->next); + } + return NULL; +} + +static void +new_got_entry_to_list (struct got_entry **list, + enum tls_type_e type, + bfd_vma offset, + enum tls_got_entries existing_entries) +{ + /* Find list end. Avoid having multiple entries of the same + type. */ + struct got_entry **p = list; + struct got_entry *entry; + + while (*p != NULL) + { + if ((*p)->type == type) + return; + p = &((*p)->next); + } + + entry = (struct got_entry *) xmalloc (sizeof (struct got_entry)); + + entry->type = type; + entry->offset = offset; + entry->next = NULL; + entry->processed = FALSE; + entry->created_dyn_relocation = FALSE; + entry->existing_entries = existing_entries; + + ARC_DEBUG ("New GOT got entry added to list: " + "type: %d, offset: %ld, existing_entries: %d\n", + type, (long) offset, existing_entries); + + /* Add the entry to the end of the list. */ + *p = entry; +} + +static enum tls_type_e +tls_type_for_reloc (reloc_howto_type *howto) +{ + enum tls_type_e ret = GOT_UNKNOWN; + + if (is_reloc_for_GOT (howto)) + return GOT_NORMAL; + + switch (howto->type) + { + case R_ARC_TLS_GD_GOT: + ret = GOT_TLS_GD; + break; + case R_ARC_TLS_IE_GOT: + ret = GOT_TLS_IE; + break; + case R_ARC_TLS_LE_32: + ret = GOT_TLS_LE; + break; + default: + ret = GOT_UNKNOWN; + break; + } + + return ret; +}; + +static struct got_entry ** +get_got_entry_list_for_symbol (bfd *abfd, + unsigned long r_symndx, + struct elf_link_hash_entry *h) +{ + if (h != NULL) + { + return &h->got.glist; + } + else + { + struct got_entry **local_got_ents + = arc_get_local_got_ents (abfd); + return &local_got_ents[r_symndx]; + } +} + + +static enum tls_type_e +arc_got_entry_type_for_reloc (reloc_howto_type *howto) +{ + enum tls_type_e type = GOT_UNKNOWN; + + if (is_reloc_for_GOT (howto)) + return GOT_NORMAL; + + if (is_reloc_for_TLS (howto)) + { + switch (howto->type) + { + case R_ARC_TLS_GD_GOT: + type = GOT_TLS_GD; + break; + case R_ARC_TLS_IE_GOT: + type = GOT_TLS_IE; + break; + default: + break; + } + } + return type; +} + +#define ADD_SYMBOL_REF_SEC_AND_RELOC(SECNAME, COND_FOR_RELOC, H) \ + htab->s##SECNAME->size; \ + { \ + if (COND_FOR_RELOC) \ + { \ + htab->srel##SECNAME->size += sizeof (Elf32_External_Rela); \ + ARC_DEBUG ("arc_info: Added reloc space in " \ + #SECNAME " section at " __FILE__ \ + ":%d for symbol %s\n", \ + __LINE__, name_for_global_symbol (H)); \ + } \ + if (H) \ + if (h->dynindx == -1 && !h->forced_local) \ + if (! bfd_elf_link_record_dynamic_symbol (info, H)) \ + return FALSE; \ + htab->s##SECNAME->size += 4; \ + } \ + +static bfd_boolean +arc_fill_got_info_for_reloc (enum tls_type_e type, + struct got_entry **list, + struct bfd_link_info * info, + struct elf_link_hash_entry *h) +{ + struct elf_link_hash_table *htab = elf_hash_table (info); + + if (got_entry_for_type (list, type) != NULL) + return TRUE; + + switch (type) + { + case GOT_NORMAL: + { + bfd_vma offset + = ADD_SYMBOL_REF_SEC_AND_RELOC (got, bfd_link_pic (info) + || h != NULL, h); + new_got_entry_to_list (list, type, offset, TLS_GOT_NONE); + } + break; + + + case GOT_TLS_GD: + { + bfd_vma offset + = ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h); + bfd_vma ATTRIBUTE_UNUSED notneeded + = ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h); + new_got_entry_to_list (list, type, offset, TLS_GOT_MOD_AND_OFF); + } + break; + case GOT_TLS_IE: + case GOT_TLS_LE: + { + bfd_vma offset + = ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h); + new_got_entry_to_list (list, type, offset, TLS_GOT_OFF); + } + break; + + default: + return FALSE; + break; + } + return TRUE; +} + + +static bfd_vma +relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, + enum tls_type_e type, + struct bfd_link_info * info, + bfd * output_bfd, + unsigned long r_symndx, + Elf_Internal_Sym * local_syms, + asection ** local_sections, + struct elf_link_hash_entry * h, + struct arc_relocation_data * reloc_data) +{ + struct elf_link_hash_table *htab = elf_hash_table (info); + struct got_entry *entry = NULL; + + if (list_p == NULL || type == GOT_UNKNOWN || type == GOT_TLS_LE) + return 0; + + entry = got_entry_for_type (list_p, type); + BFD_ASSERT (entry); + + if (h == NULL + || (! elf_hash_table (info)->dynamic_sections_created + || (bfd_link_pic (info) + && SYMBOL_REFERENCES_LOCAL (info, h)))) + { + const char ATTRIBUTE_UNUSED *symbol_name; + static const char local_name[] = "(local)"; + asection *tls_sec = NULL; + bfd_vma sym_value = 0; + + if (h != NULL) + { + // TODO: This should not be here. + reloc_data->sym_value = h->root.u.def.value; + reloc_data->sym_section = h->root.u.def.section; + + sym_value = h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset; + + tls_sec = elf_hash_table (info)->tls_sec; + + symbol_name = h->root.root.string; + } + else + { + Elf_Internal_Sym *sym = local_syms + r_symndx; + asection *sec = local_sections[r_symndx]; + + sym_value = sym->st_value + + sec->output_section->vma + + sec->output_offset; + + tls_sec = elf_hash_table (info)->tls_sec; + + symbol_name = local_name; + } + + + if (entry && entry->processed == FALSE) + { + switch (entry->type) + { + case GOT_TLS_GD: + { + BFD_ASSERT (tls_sec && tls_sec->output_section); + bfd_vma sec_vma = tls_sec->output_section->vma; + + bfd_put_32 (output_bfd, + sym_value - sec_vma, + htab->sgot->contents + entry->offset + + (entry->existing_entries == TLS_GOT_MOD_AND_OFF + ? 4 : 0)); + + ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx " + "@ %p, for symbol %s\n", + (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" : + "GOT_TLS_IE"), + (long) (sym_value - sec_vma), + htab->sgot->contents + entry->offset + + (entry->existing_entries == TLS_GOT_MOD_AND_OFF + ? 4 : 0), + symbol_name); + } + break; + + case GOT_TLS_IE: + { + BFD_ASSERT (tls_sec && tls_sec->output_section); + bfd_vma ATTRIBUTE_UNUSED sec_vma + = tls_sec->output_section->vma; + + ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx " + "@ %p, for symbol %s\n", + (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" : + "GOT_TLS_IE"), + (long) (sym_value - sec_vma), + htab->sgot->contents + entry->offset + + (entry->existing_entries == TLS_GOT_MOD_AND_OFF + ? 4 : 0), + symbol_name); + } + break; + + case GOT_NORMAL: + { + bfd_vma sec_vma + = reloc_data->sym_section->output_section->vma + + reloc_data->sym_section->output_offset; + + if (h != NULL + && h->root.type == bfd_link_hash_undefweak) + ARC_DEBUG ("arc_info: PATCHED: NOT_PATCHED " + "@ %#08lx for sym %s in got offset %#lx " + "(is undefweak)\n", + (long) (htab->sgot->output_section->vma + + htab->sgot->output_offset + + entry->offset), + symbol_name, + (long) entry->offset); + else + { + bfd_put_32 (output_bfd, + reloc_data->sym_value + sec_vma, + htab->sgot->contents + entry->offset); + ARC_DEBUG ("arc_info: PATCHED: %#08lx " + "@ %#08lx for sym %s in got offset %#lx\n", + (long) (reloc_data->sym_value + sec_vma), + (long) (htab->sgot->output_section->vma + + htab->sgot->output_offset + entry->offset), + symbol_name, + (long) entry->offset); + } + } + break; + default: + BFD_ASSERT (0); + break; + } + entry->processed = TRUE; + } + } + + return entry->offset; +} + +static void +create_got_dynrelocs_for_single_entry (struct got_entry *list, + bfd *output_bfd, + struct bfd_link_info * info, + struct elf_link_hash_entry *h) +{ + if (list == NULL) + return; + + bfd_vma got_offset = list->offset; + + if (list->type == GOT_NORMAL + && list->created_dyn_relocation == FALSE) + { + if (bfd_link_pic (info) + && h != NULL + && (info->symbolic || h->dynindx == -1) + && h->def_regular) + { + ADD_RELA (output_bfd, got, got_offset, 0, R_ARC_RELATIVE, 0); + } + /* Do not fully understand the side effects of this condition. + The relocation space might still being reserved. Perhaps + I should clear its value. */ + else if (h != NULL && h->dynindx != -1) + { + ADD_RELA (output_bfd, got, got_offset, h->dynindx, R_ARC_GLOB_DAT, 0); + } + list->created_dyn_relocation = TRUE; + } + else if (list->existing_entries != TLS_GOT_NONE + && list->created_dyn_relocation == FALSE) + { + /* TODO TLS: This is not called for local symbols. + In order to correctly implement TLS, this should also + be called for all local symbols with tls got entries. + Should be moved to relocate_section in order to make it + work for local symbols. */ + struct elf_link_hash_table *htab = elf_hash_table (info); + enum tls_got_entries e = list->existing_entries; + + BFD_ASSERT (list->type != GOT_TLS_GD + || list->existing_entries == TLS_GOT_MOD_AND_OFF); + + bfd_vma dynindx = (h == NULL || h->dynindx == -1) ? 0 : h->dynindx; + + if (e == TLS_GOT_MOD_AND_OFF || e == TLS_GOT_MOD) + { + ADD_RELA (output_bfd, got, got_offset, dynindx, + R_ARC_TLS_DTPMOD, 0); + ARC_DEBUG ("arc_info: TLS_DYNRELOC: type = %d, \ +GOT_OFFSET = %#lx, GOT_VMA = %#lx, INDEX = %ld, ADDEND = 0x0\n", + list->type, + (long) got_offset, + (long) (htab->sgot->output_section->vma + + htab->sgot->output_offset + got_offset), + (long) dynindx); + } + + if (e == TLS_GOT_MOD_AND_OFF || e == TLS_GOT_OFF) + { + bfd_vma addend = 0; + if (list->type == GOT_TLS_IE) + addend = bfd_get_32 (output_bfd, + htab->sgot->contents + got_offset); + + ADD_RELA (output_bfd, got, + got_offset + (e == TLS_GOT_MOD_AND_OFF ? 4 : 0), + dynindx, + (list->type == GOT_TLS_IE ? R_ARC_TLS_TPOFF + : R_ARC_TLS_DTPOFF), + addend); + + ARC_DEBUG ("arc_info: TLS_DYNRELOC: type = %d, \ +GOT_OFFSET = %#lx, GOT_VMA = %#lx, INDEX = %ld, ADDEND = %#lx\n", + list->type, + (long) got_offset, + (long) (htab->sgot->output_section->vma + + htab->sgot->output_offset + got_offset), + (long) dynindx, (long) addend); + } + list->created_dyn_relocation = TRUE; + } +} + +static void +create_got_dynrelocs_for_got_info (struct got_entry **list_p, + bfd *output_bfd, + struct bfd_link_info * info, + struct elf_link_hash_entry *h) +{ + if (list_p == NULL) + return; + + struct got_entry *list = *list_p; + /* Traverse the list of got entries for this symbol. */ + while (list) + { + create_got_dynrelocs_for_single_entry (list, output_bfd, info, h); + list = list->next; + } +} + +#undef ADD_SYMBOL_REF_SEC_AND_RELOC + +#endif /* ARC_GOT_H */ diff --git a/bfd/archive.c b/bfd/archive.c index 68c18bf..7f94376 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -392,6 +392,7 @@ open_nested_file (const char *filename, bfd *archive) { n_bfd->lto_output = archive->lto_output; n_bfd->no_export = archive->no_export; + n_bfd->my_archive = archive; } return n_bfd; } @@ -802,7 +803,7 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file) Note that last_file->origin can be odd in the case of BSD-4.4-style element with a long odd size. */ filestart += filestart % 2; - if (filestart <= last_file->proxy_origin) + if (filestart < last_file->proxy_origin) { /* Prevent looping. See PR19256. */ bfd_set_error (bfd_error_malformed_archive); @@ -1144,10 +1145,9 @@ bfd_slurp_armap (bfd *abfd) return do_slurp_coff_armap (abfd); else if (CONST_STRNEQ (nextname, "/SYM64/ ")) { - /* 64bit ELF (Irix 6) archive. */ + /* 64bit (Irix 6) archive. */ #ifdef BFD64 - extern bfd_boolean bfd_elf64_archive_slurp_armap (bfd *); - return bfd_elf64_archive_slurp_armap (abfd); + return _bfd_archive_64_bit_slurp_armap (abfd); #else bfd_set_error (bfd_error_wrong_format); return FALSE; @@ -2466,15 +2466,49 @@ bsd_write_armap (bfd *arch, unsigned int stringsize = stridx + padit; /* Include 8 bytes to store ranlibsize and stringsize in output. */ unsigned int mapsize = ranlibsize + stringsize + 8; - file_ptr firstreal; - bfd *current = arch->archive_head; - bfd *last_elt = current; /* Last element arch seen. */ + file_ptr firstreal, first; + bfd *current; + bfd *last_elt; bfd_byte temp[4]; unsigned int count; struct ar_hdr hdr; long uid, gid; - firstreal = mapsize + elength + sizeof (struct ar_hdr) + SARMAG; + first = mapsize + elength + sizeof (struct ar_hdr) + SARMAG; + +#ifdef BFD64 + firstreal = first; + current = arch->archive_head; + last_elt = current; /* Last element arch seen. */ + for (count = 0; count < orl_count; count++) + { + unsigned int offset; + + if (map[count].u.abfd != last_elt) + { + do + { + struct areltdata *ared = arch_eltdata (current); + + firstreal += (ared->parsed_size + ared->extra_size + + sizeof (struct ar_hdr)); + firstreal += firstreal % 2; + current = current->archive_next; + } + while (current != map[count].u.abfd); + } + + /* The archive file format only has 4 bytes to store the offset + of the member. Generate 64-bit archive if an archive is past + its 4Gb limit. */ + offset = (unsigned int) firstreal; + if (firstreal != (file_ptr) offset) + return _bfd_archive_64_bit_write_armap (arch, elength, map, + orl_count, stridx); + + last_elt = current; + } +#endif /* If deterministic, we use 0 as the timestamp in the map. Some linkers may require that the archive filesystem modification @@ -2513,6 +2547,9 @@ bsd_write_armap (bfd *arch, if (bfd_bwrite (temp, sizeof (temp), arch) != sizeof (temp)) return FALSE; + firstreal = first; + current = arch->archive_head; + last_elt = current; /* Last element arch seen. */ for (count = 0; count < orl_count; count++) { unsigned int offset; @@ -2654,6 +2691,7 @@ coff_write_armap (bfd *arch, unsigned int stringsize = stridx; unsigned int mapsize = stringsize + ranlibsize; file_ptr archive_member_file_ptr; + file_ptr first_archive_member_file_ptr; bfd *current = arch->archive_head; unsigned int count; struct ar_hdr hdr; @@ -2663,10 +2701,42 @@ coff_write_armap (bfd *arch, mapsize++; /* Work out where the first object file will go in the archive. */ - archive_member_file_ptr = (mapsize - + elength - + sizeof (struct ar_hdr) - + SARMAG); + first_archive_member_file_ptr = (mapsize + + elength + + sizeof (struct ar_hdr) + + SARMAG); + +#ifdef BFD64 + current = arch->archive_head; + count = 0; + archive_member_file_ptr = first_archive_member_file_ptr; + while (current != NULL && count < symbol_count) + { + /* For each symbol which is used defined in this object, write + out the object file's address in the archive. */ + + while (count < symbol_count && map[count].u.abfd == current) + { + unsigned int offset = (unsigned int) archive_member_file_ptr; + + /* Generate 64-bit archive if an archive is past its 4Gb + limit. */ + if (archive_member_file_ptr != (file_ptr) offset) + return _bfd_archive_64_bit_write_armap (arch, elength, map, + symbol_count, stridx); + count++; + } + 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; + } +#endif memset (&hdr, ' ', sizeof (struct ar_hdr)); hdr.ar_name[0] = '/'; @@ -2697,6 +2767,7 @@ coff_write_armap (bfd *arch, current = arch->archive_head; count = 0; + archive_member_file_ptr = first_archive_member_file_ptr; while (current != NULL && count < symbol_count) { /* For each symbol which is used defined in this object, write diff --git a/bfd/archive64.c b/bfd/archive64.c index 3192f40..be1ac7c 100644 --- a/bfd/archive64.c +++ b/bfd/archive64.c @@ -1,4 +1,4 @@ -/* Support for 64-bit ELF archives. +/* Support for 64-bit archives. Copyright (C) 1996-2016 Free Software Foundation, Inc. Ian Lance Taylor, Cygnus Support Linker support added by Mark Mitchell, CodeSourcery, LLC. @@ -21,7 +21,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -/* This file supports the 64-bit (MIPS) ELF archives. */ +/* This file supports the 64-bit archives. We use the same format as + the 64-bit (MIPS) ELF archives. */ #include "sysdep.h" #include "bfd.h" @@ -31,14 +32,10 @@ /* Irix 6 defines a 64bit archive map format, so that they can have archives more than 4 GB in size. */ -bfd_boolean bfd_elf64_archive_slurp_armap (bfd *); -bfd_boolean bfd_elf64_archive_write_armap - (bfd *, unsigned int, struct orl *, unsigned int, int); - /* Read an Irix 6 armap. */ bfd_boolean -bfd_elf64_archive_slurp_armap (bfd *abfd) +_bfd_archive_64_bit_slurp_armap (bfd *abfd) { struct artdata *ardata = bfd_ardata (abfd); char nextname[17]; @@ -150,11 +147,11 @@ release_symdefs: linker crashes. */ bfd_boolean -bfd_elf64_archive_write_armap (bfd *arch, - unsigned int elength, - struct orl *map, - unsigned int symbol_count, - int stridx) +_bfd_archive_64_bit_write_armap (bfd *arch, + unsigned int elength, + struct orl *map, + unsigned int symbol_count, + int stridx) { unsigned int ranlibsize = (symbol_count * 8) + 8; unsigned int stringsize = stridx; diff --git a/bfd/archures.c b/bfd/archures.c index 12e3342..af70b18 100644 --- a/bfd/archures.c +++ b/bfd/archures.c @@ -137,13 +137,29 @@ DESCRIPTION .#define bfd_mach_sparc_v9a 8 {* with ultrasparc add'ns. *} .#define bfd_mach_sparc_v8plusb 9 {* with cheetah add'ns. *} .#define bfd_mach_sparc_v9b 10 {* with cheetah add'ns. *} +.#define bfd_mach_sparc_v8plusc 11 {* with UA2005 and T1 add'ns. *} +.#define bfd_mach_sparc_v9c 12 {* with UA2005 and T1 add'ns. *} +.#define bfd_mach_sparc_v8plusd 13 {* with UA2007 and T3 add'ns. *} +.#define bfd_mach_sparc_v9d 14 {* with UA2007 and T3 add'ns. *} +.#define bfd_mach_sparc_v8pluse 15 {* with OSA2001 and T4 add'ns (no IMA). *} +.#define bfd_mach_sparc_v9e 16 {* with OSA2001 and T4 add'ns (no IMA). *} +.#define bfd_mach_sparc_v8plusv 17 {* with OSA2011 and T4 and IMA and FJMAU add'ns. *} +.#define bfd_mach_sparc_v9v 18 {* with OSA2011 and T4 and IMA and FJMAU add'ns. *} +.#define bfd_mach_sparc_v8plusm 19 {* with OSA2015 and M7 add'ns. *} +.#define bfd_mach_sparc_v9m 20 {* with OSA2015 and M7 add'ns. *} .{* Nonzero if MACH has the v9 instruction set. *} .#define bfd_mach_sparc_v9_p(mach) \ -. ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ +. ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9m \ . && (mach) != bfd_mach_sparc_sparclite_le) .{* Nonzero if MACH is a 64 bit sparc architecture. *} .#define bfd_mach_sparc_64bit_p(mach) \ -. ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) +. ((mach) >= bfd_mach_sparc_v9 \ +. && (mach) != bfd_mach_sparc_v8plusb \ +. && (mach) != bfd_mach_sparc_v8plusc \ +. && (mach) != bfd_mach_sparc_v8plusd \ +. && (mach) != bfd_mach_sparc_v8pluse \ +. && (mach) != bfd_mach_sparc_v8plusv \ +. && (mach) != bfd_mach_sparc_v8plusm) . bfd_arch_spu, {* PowerPC SPU *} .#define bfd_mach_spu 256 . bfd_arch_mips, {* MIPS Rxxxx *} @@ -918,7 +934,7 @@ bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg) } /* -INTERNAL_FUNCTION +FUNCTION bfd_default_set_arch_mach SYNOPSIS diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 5df2bab..99cafba 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -256,7 +256,7 @@ struct orl /* Output ranlib. */ } u; /* bfd* or file position. */ int namidx; /* Index into string table. */ }; - + /* Linenumber stuff. */ typedef struct lineno_cache_entry { @@ -270,11 +270,19 @@ typedef struct lineno_cache_entry alent; /* Object and core file sections. */ +typedef struct bfd_section *sec_ptr; #define align_power(addr, align) \ (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align)))) -typedef struct bfd_section *sec_ptr; +/* Align an address upward to a boundary, expressed as a number of bytes. + E.g. align to an 8-byte boundary with argument of 8. Take care never + to wrap around if the address is within boundary-1 of the end of the + address space. */ +#define BFD_ALIGN(this, boundary) \ + ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \ + ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \ + : ~ (bfd_vma) 0) #define bfd_get_section_name(bfd, ptr) ((void) bfd, (ptr)->name) #define bfd_get_section_vma(bfd, ptr) ((void) bfd, (ptr)->vma) @@ -511,7 +519,6 @@ extern void warn_deprecated (const char *, const char *, int, const char *); #define bfd_get_file_flags(abfd) ((abfd)->flags) #define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags) #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) @@ -903,6 +910,9 @@ extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd (bfd *, struct bfd_link_info *); +extern void bfd_elf32_arm_keep_private_stub_output_sections + (struct bfd_link_info *); + /* ELF ARM mapping symbol support. */ #define BFD_ARM_SPECIAL_SYM_TYPE_MAP (1 << 0) #define BFD_ARM_SPECIAL_SYM_TYPE_TAG (1 << 1) @@ -934,7 +944,8 @@ 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 *, unsigned int), + struct bfd_section * (*) (const char *, struct bfd_section *, + struct bfd_section *, unsigned int), void (*) (void)); extern bfd_boolean elf32_arm_build_stubs (struct bfd_link_info *); @@ -947,13 +958,6 @@ extern bfd_boolean elf32_arm_fix_exidx_coverage extern bfd_boolean elf32_tic6x_fix_exidx_coverage (struct bfd_section **, unsigned int, struct bfd_link_info *, bfd_boolean); -/* PowerPC @tls opcode transform/validate. */ -extern unsigned int _bfd_elf_ppc_at_tls_transform - (unsigned int, unsigned int); -/* PowerPC @tprel opcode transform/validate. */ -extern unsigned int _bfd_elf_ppc_at_tprel_transform - (unsigned int, unsigned int); - extern void bfd_elf64_aarch64_init_maps (bfd *); @@ -961,10 +965,10 @@ extern void bfd_elf32_aarch64_init_maps (bfd *); extern void bfd_elf64_aarch64_set_options - (bfd *, struct bfd_link_info *, int, int, int, int, int); + (bfd *, struct bfd_link_info *, int, int, int, int, int, int); extern void bfd_elf32_aarch64_set_options - (bfd *, struct bfd_link_info *, int, int, int, int, int); + (bfd *, struct bfd_link_info *, int, int, int, int, int, int); /* ELF AArch64 mapping symbol support. */ #define BFD_AARCH64_SPECIAL_SYM_TYPE_MAP (1 << 0) diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index fb4858c..f9f0e26 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -263,7 +263,7 @@ struct orl /* Output ranlib. */ } u; /* bfd* or file position. */ int namidx; /* Index into string table. */ }; - + /* Linenumber stuff. */ typedef struct lineno_cache_entry { @@ -277,11 +277,19 @@ typedef struct lineno_cache_entry alent; /* Object and core file sections. */ +typedef struct bfd_section *sec_ptr; #define align_power(addr, align) \ (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align)))) -typedef struct bfd_section *sec_ptr; +/* Align an address upward to a boundary, expressed as a number of bytes. + E.g. align to an 8-byte boundary with argument of 8. Take care never + to wrap around if the address is within boundary-1 of the end of the + address space. */ +#define BFD_ALIGN(this, boundary) \ + ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \ + ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \ + : ~ (bfd_vma) 0) #define bfd_get_section_name(bfd, ptr) ((void) bfd, (ptr)->name) #define bfd_get_section_vma(bfd, ptr) ((void) bfd, (ptr)->vma) @@ -518,7 +526,6 @@ extern void warn_deprecated (const char *, const char *, int, const char *); #define bfd_get_file_flags(abfd) ((abfd)->flags) #define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags) #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) @@ -910,6 +917,9 @@ extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd (bfd *, struct bfd_link_info *); +extern void bfd_elf32_arm_keep_private_stub_output_sections + (struct bfd_link_info *); + /* ELF ARM mapping symbol support. */ #define BFD_ARM_SPECIAL_SYM_TYPE_MAP (1 << 0) #define BFD_ARM_SPECIAL_SYM_TYPE_TAG (1 << 1) @@ -941,7 +951,8 @@ 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 *, unsigned int), + struct bfd_section * (*) (const char *, struct bfd_section *, + struct bfd_section *, unsigned int), void (*) (void)); extern bfd_boolean elf32_arm_build_stubs (struct bfd_link_info *); @@ -954,13 +965,6 @@ extern bfd_boolean elf32_arm_fix_exidx_coverage extern bfd_boolean elf32_tic6x_fix_exidx_coverage (struct bfd_section **, unsigned int, struct bfd_link_info *, bfd_boolean); -/* PowerPC @tls opcode transform/validate. */ -extern unsigned int _bfd_elf_ppc_at_tls_transform - (unsigned int, unsigned int); -/* PowerPC @tprel opcode transform/validate. */ -extern unsigned int _bfd_elf_ppc_at_tprel_transform - (unsigned int, unsigned int); - extern void bfd_elf64_aarch64_init_maps (bfd *); @@ -968,10 +972,10 @@ extern void bfd_elf32_aarch64_init_maps (bfd *); extern void bfd_elf64_aarch64_set_options - (bfd *, struct bfd_link_info *, int, int, int, int, int); + (bfd *, struct bfd_link_info *, int, int, int, int, int, int); extern void bfd_elf32_aarch64_set_options - (bfd *, struct bfd_link_info *, int, int, int, int, int); + (bfd *, struct bfd_link_info *, int, int, int, int, int, int); /* ELF AArch64 mapping symbol support. */ #define BFD_AARCH64_SPECIAL_SYM_TYPE_MAP (1 << 0) @@ -1432,8 +1436,8 @@ typedef struct bfd_section when memory read flag isn't set. */ #define SEC_COFF_NOREAD 0x40000000 - /* Indicate that section has the no read flag set. */ -#define SEC_ELF_NOREAD 0x80000000 + /* Indicate that section has the purecode flag set. */ +#define SEC_ELF_PURECODE 0x80000000 /* End of section flags. */ @@ -1501,7 +1505,7 @@ typedef struct bfd_section information. */ bfd_vma lma; - /* The size of the section in octets, as it will be output. + /* The size of the section in *octets*, as it will be output. Contains a value even if the section has no contents (e.g., the size of <<.bss>>). */ bfd_size_type size; @@ -1952,13 +1956,29 @@ enum bfd_architecture #define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ #define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ #define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ +#define bfd_mach_sparc_v8plusc 11 /* with UA2005 and T1 add'ns. */ +#define bfd_mach_sparc_v9c 12 /* with UA2005 and T1 add'ns. */ +#define bfd_mach_sparc_v8plusd 13 /* with UA2007 and T3 add'ns. */ +#define bfd_mach_sparc_v9d 14 /* with UA2007 and T3 add'ns. */ +#define bfd_mach_sparc_v8pluse 15 /* with OSA2001 and T4 add'ns (no IMA). */ +#define bfd_mach_sparc_v9e 16 /* with OSA2001 and T4 add'ns (no IMA). */ +#define bfd_mach_sparc_v8plusv 17 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */ +#define bfd_mach_sparc_v9v 18 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */ +#define bfd_mach_sparc_v8plusm 19 /* with OSA2015 and M7 add'ns. */ +#define bfd_mach_sparc_v9m 20 /* with OSA2015 and M7 add'ns. */ /* Nonzero if MACH has the v9 instruction set. */ #define bfd_mach_sparc_v9_p(mach) \ - ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ + ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9m \ && (mach) != bfd_mach_sparc_sparclite_le) /* Nonzero if MACH is a 64 bit sparc architecture. */ #define bfd_mach_sparc_64bit_p(mach) \ - ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) + ((mach) >= bfd_mach_sparc_v9 \ + && (mach) != bfd_mach_sparc_v8plusb \ + && (mach) != bfd_mach_sparc_v8plusc \ + && (mach) != bfd_mach_sparc_v8plusd \ + && (mach) != bfd_mach_sparc_v8pluse \ + && (mach) != bfd_mach_sparc_v8plusv \ + && (mach) != bfd_mach_sparc_v8plusm) bfd_arch_spu, /* PowerPC SPU */ #define bfd_mach_spu 256 bfd_arch_mips, /* MIPS Rxxxx */ @@ -2367,6 +2387,9 @@ const bfd_arch_info_type *bfd_arch_get_compatible void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg); +bfd_boolean bfd_default_set_arch_mach + (bfd *abfd, enum bfd_architecture arch, unsigned long mach); + enum bfd_architecture bfd_get_arch (bfd *abfd); unsigned long bfd_get_mach (bfd *abfd); @@ -2986,6 +3009,9 @@ to compensate for the borrow when the low bits are added. */ BFD_RELOC_MICROMIPS_10_PCREL_S1, BFD_RELOC_MICROMIPS_16_PCREL_S1, +/* MIPS16 PC-relative relocation. */ + BFD_RELOC_MIPS16_16_PCREL_S1, + /* MIPS PC-relative relocations. */ BFD_RELOC_MIPS_21_PCREL_S2, BFD_RELOC_MIPS_26_PCREL_S2, @@ -3720,6 +3746,7 @@ pc-relative or some form of GOT-indirect relocation. */ BFD_RELOC_ARC_TLS_LE_32, BFD_RELOC_ARC_S25W_PCREL_PLT, BFD_RELOC_ARC_S21H_PCREL_PLT, + BFD_RELOC_ARC_NPS_CMEM16, /* ADI Blackfin 16 bit immediate absolute reloc. */ BFD_RELOC_BFIN_16_IMM, @@ -5714,6 +5741,9 @@ important as several tables in the AArch64 bfd backend are indexed by these enumerators; make sure they are all synced. */ BFD_RELOC_AARCH64_RELOC_START, +/* Deprecated AArch64 null relocation code. */ + BFD_RELOC_AARCH64_NULL, + /* AArch64 null relocation code. */ BFD_RELOC_AARCH64_NONE, @@ -6366,8 +6396,7 @@ typedef struct bfd_symbol #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. */ @@ -6379,7 +6408,9 @@ typedef struct bfd_symbol /* Used by the linker. */ #define BSF_KEEP (1 << 5) -#define BSF_KEEP_G (1 << 6) + + /* An ELF common symbol. */ +#define BSF_ELF_COMMON (1 << 6) /* A weak global symbol, overridable without warnings by a regular global symbol of the same name. */ @@ -6526,7 +6557,7 @@ enum bfd_direction enum bfd_plugin_format { - bfd_plugin_uknown = 0, + bfd_plugin_unknown = 0, bfd_plugin_yes = 1, bfd_plugin_no = 2 }; @@ -6571,7 +6602,7 @@ struct bfd ENUM_BITFIELD (bfd_direction) direction : 2; /* Format_specific flags. */ - flagword flags : 18; + flagword flags : 20; /* 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 @@ -6651,16 +6682,23 @@ struct bfd /* Compress sections in this BFD with SHF_COMPRESSED from gABI. */ #define BFD_COMPRESS_GABI 0x20000 + /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this + BFD. */ +#define BFD_CONVERT_ELF_COMMON 0x40000 + + /* Use the ELF STT_COMMON type in this BFD. */ +#define BFD_USE_ELF_STT_COMMON 0x80000 + /* Flags bits to be saved in bfd_preserve_save. */ #define BFD_FLAGS_SAVED \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN \ - | BFD_COMPRESS_GABI) + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) /* Flags bits which are for BFD use only. */ #define BFD_FLAGS_FOR_BFD_USE_MASK \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ - | BFD_COMPRESS_GABI) + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) /* Is the file descriptor being cached? That is, can it be closed as needed, and re-opened when accessed later? */ @@ -7403,6 +7441,7 @@ typedef struct bfd_target NAME##_bfd_copy_link_hash_symbol_type, \ NAME##_bfd_final_link, \ NAME##_bfd_link_split_section, \ + NAME##_bfd_link_check_relocs, \ NAME##_bfd_gc_sections, \ NAME##_bfd_lookup_section_flags, \ NAME##_bfd_merge_sections, \ @@ -7444,6 +7483,9 @@ typedef struct bfd_target /* Should this section be split up into smaller pieces during linking. */ bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); + /* Check the relocations in the bfd for validity. */ + bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *); + /* Remove sections that are not referenced from the output. */ bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); @@ -7513,9 +7555,9 @@ const bfd_target *bfd_get_target_info (const char *target_name, const char **def_target_arch); const char ** bfd_target_list (void); -const bfd_target *bfd_search_for_target - (int (*search_func) (const bfd_target *, void *), - void *); +const bfd_target *bfd_iterate_over_targets + (int (*func) (const bfd_target *, void *), + void *data); const char *bfd_flavour_name (enum bfd_flavour flavour); @@ -7556,6 +7598,12 @@ struct bfd_elf_version_tree * bfd_find_version_for_sym bfd_boolean bfd_hide_sym_by_version (struct bfd_elf_version_tree *verdefs, const char *sym_name); +bfd_boolean bfd_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); + +bfd_boolean _bfd_generic_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); + /* Extracted from simple.c. */ bfd_byte *bfd_simple_get_relocated_section_contents (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table); diff --git a/bfd/bfd.c b/bfd/bfd.c index 58c27c9..806b9fb 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -46,7 +46,7 @@ CODE_FRAGMENT . .enum bfd_plugin_format . { -. bfd_plugin_uknown = 0, +. bfd_plugin_unknown = 0, . bfd_plugin_yes = 1, . bfd_plugin_no = 2 . }; @@ -91,7 +91,7 @@ CODE_FRAGMENT . ENUM_BITFIELD (bfd_direction) direction : 2; . . {* Format_specific flags. *} -. flagword flags : 18; +. flagword flags : 20; . . {* 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 @@ -171,16 +171,23 @@ CODE_FRAGMENT . {* Compress sections in this BFD with SHF_COMPRESSED from gABI. *} .#define BFD_COMPRESS_GABI 0x20000 . +. {* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this +. BFD. *} +.#define BFD_CONVERT_ELF_COMMON 0x40000 +. +. {* Use the ELF STT_COMMON type in this BFD. *} +.#define BFD_USE_ELF_STT_COMMON 0x80000 +. . {* Flags bits to be saved in bfd_preserve_save. *} .#define BFD_FLAGS_SAVED \ . (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN \ -. | BFD_COMPRESS_GABI) +. | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) . . {* Flags bits which are for BFD use only. *} .#define BFD_FLAGS_FOR_BFD_USE_MASK \ . (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ . | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ -. | BFD_COMPRESS_GABI) +. | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) . . {* Is the file descriptor being cached? That is, can it be closed as . needed, and re-opened when accessed later? *} @@ -696,7 +703,8 @@ _bfd_default_error_handler (const char *fmt, ...) if (abfd == NULL) /* Invoking %B with a null bfd pointer is an internal error. */ abort (); - else if (abfd->my_archive) + else if (abfd->my_archive + && !bfd_is_thin_archive (abfd->my_archive)) snprintf (bufp, avail, "%s(%s)", abfd->my_archive->filename, abfd->filename); else diff --git a/bfd/bfdio.c b/bfd/bfdio.c index 55deb3b..71991bd 100644 --- a/bfd/bfdio.c +++ b/bfd/bfdio.c @@ -234,7 +234,8 @@ bfd_tell (bfd *abfd) bfd *parent_bfd = abfd; ptr = abfd->iovec->btell (abfd); - while (parent_bfd->my_archive != NULL) + while (parent_bfd->my_archive != NULL + && !bfd_is_thin_archive (parent_bfd->my_archive)) { ptr -= parent_bfd->origin; parent_bfd = parent_bfd->my_archive; @@ -289,7 +290,7 @@ bfd_seek (bfd *abfd, file_ptr position, int direction) if (direction == SEEK_CUR && position == 0) return 0; - if (abfd->format != bfd_archive && abfd->my_archive == 0) + if (abfd->my_archive == NULL || bfd_is_thin_archive (abfd->my_archive)) { if (direction == SEEK_SET && (bfd_vma) position == abfd->where) return 0; @@ -314,7 +315,8 @@ bfd_seek (bfd *abfd, file_ptr position, int direction) { bfd *parent_bfd = abfd; - while (parent_bfd->my_archive != NULL) + while (parent_bfd->my_archive != NULL + && !bfd_is_thin_archive (parent_bfd->my_archive)) { file_position += parent_bfd->origin; parent_bfd = parent_bfd->my_archive; diff --git a/bfd/bfdwin.c b/bfd/bfdwin.c index 1aaee2c..f3faba4 100644 --- a/bfd/bfdwin.c +++ b/bfd/bfdwin.c @@ -144,7 +144,8 @@ bfd_get_file_window (bfd *abfd, int fd; /* Find the real file and the real offset into it. */ - while (abfd->my_archive != NULL) + while (abfd->my_archive != NULL + && !bfd_is_thin_archive (abfd->my_archive)) { offset += abfd->origin; abfd = abfd->my_archive; diff --git a/bfd/binary.c b/bfd/binary.c index ce94af2..d2fd293 100644 --- a/bfd/binary.c +++ b/bfd/binary.c @@ -270,7 +270,7 @@ binary_set_section_contents (bfd *abfd, if (s->filepos < 0) (*_bfd_error_handler) - (_("Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."), + (_("Warning: Writing section `%s' at huge (ie negative) file offset 0x%lx."), bfd_get_section_name (abfd, s), (unsigned long) s->filepos); } @@ -309,12 +309,12 @@ binary_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, #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_just_syms _bfd_generic_link_just_syms -#define binary_bfd_copy_link_hash_symbol_type \ - _bfd_generic_copy_link_hash_symbol_type +#define binary_bfd_copy_link_hash_symbol_type _bfd_generic_copy_link_hash_symbol_type #define binary_bfd_link_add_symbols _bfd_generic_link_add_symbols #define binary_bfd_final_link _bfd_generic_final_link #define binary_bfd_link_split_section _bfd_generic_link_split_section #define binary_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define binary_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target binary_vec = { diff --git a/bfd/bout.c b/bfd/bout.c index 77023db..99749f1 100644 --- a/bfd/bout.c +++ b/bfd/bout.c @@ -517,11 +517,9 @@ get_value (arelent *reloc, value = h->u.c.size; else { - if (! ((*link_info->callbacks->undefined_symbol) - (link_info, bfd_asymbol_name (symbol), - input_section->owner, input_section, reloc->address, - TRUE))) - abort (); + (*link_info->callbacks->undefined_symbol) + (link_info, bfd_asymbol_name (symbol), + input_section->owner, input_section, reloc->address, TRUE); value = 0; } } @@ -1393,6 +1391,7 @@ b_out_bfd_get_relocated_section_contents (bfd *output_bfd, #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 +#define b_out_bfd_link_check_relocs _bfd_generic_link_check_relocs extern const bfd_target bout_le_vec; diff --git a/bfd/cache.c b/bfd/cache.c index 17bf7ea..8efbcb9 100644 --- a/bfd/cache.c +++ b/bfd/cache.c @@ -241,7 +241,8 @@ bfd_cache_lookup_worker (bfd *abfd, enum cache_flag flag) if ((abfd->flags & BFD_IN_MEMORY) != 0) abort (); - while (abfd->my_archive) + while (abfd->my_archive != NULL + && !bfd_is_thin_archive (abfd->my_archive)) abfd = abfd->my_archive; if (abfd->iostream != NULL) @@ -466,7 +467,8 @@ cache_bmmap (struct bfd *abfd ATTRIBUTE_UNUSED, pagesize_m1 = getpagesize () - 1; /* Handle archive members. */ - if (abfd->my_archive != NULL) + if (abfd->my_archive != NULL + && !bfd_is_thin_archive (abfd->my_archive)) offset += abfd->origin; /* Align. */ @@ -566,7 +568,7 @@ RETURNS */ bfd_boolean -bfd_cache_close_all () +bfd_cache_close_all (void) { bfd_boolean ret = TRUE; diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c index f69f22b..16edc5f 100644 --- a/bfd/coff-alpha.c +++ b/bfd/coff-alpha.c @@ -1101,24 +1101,19 @@ alpha_ecoff_get_relocated_section_contents (bfd *abfd, switch (r) { case bfd_reloc_undefined: - if (! ((*link_info->callbacks->undefined_symbol) - (link_info, bfd_asymbol_name (*rel->sym_ptr_ptr), - input_bfd, input_section, rel->address, TRUE))) - goto error_return; + (*link_info->callbacks->undefined_symbol) + (link_info, bfd_asymbol_name (*rel->sym_ptr_ptr), + input_bfd, input_section, rel->address, TRUE); break; case bfd_reloc_dangerous: - if (! ((*link_info->callbacks->reloc_dangerous) - (link_info, err, input_bfd, input_section, - rel->address))) - goto error_return; + (*link_info->callbacks->reloc_dangerous) + (link_info, err, input_bfd, input_section, rel->address); break; case bfd_reloc_overflow: - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*rel->sym_ptr_ptr), - rel->howto->name, rel->addend, input_bfd, - input_section, rel->address))) - goto error_return; + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*rel->sym_ptr_ptr), + rel->howto->name, rel->addend, input_bfd, + input_section, rel->address); break; case bfd_reloc_outofrange: default: @@ -1696,10 +1691,9 @@ alpha_relocate_section (bfd *output_bfd, do not have a meaningful number for the location within the section that is being relocated. */ - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, - input_section, (bfd_vma) 0, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, + input_section, (bfd_vma) 0, TRUE); addend = 0; } } @@ -1712,10 +1706,9 @@ alpha_relocate_section (bfd *output_bfd, /* This symbol is not being written out. Pass the address as 0, as with undefined_symbol, above. */ - if (! ((*info->callbacks->unattached_reloc) - (info, h->root.root.string, input_bfd, - input_section, (bfd_vma) 0))) - return FALSE; + (*info->callbacks->unattached_reloc) + (info, h->root.root.string, + input_bfd, input_section, (bfd_vma) 0); } addend = alpha_convert_external_reloc (output_bfd, info, @@ -1839,10 +1832,9 @@ alpha_relocate_section (bfd *output_bfd, && h->indx == -1) { /* This symbol is not being written out. */ - if (! ((*info->callbacks->unattached_reloc) - (info, h->root.root.string, input_bfd, - input_section, r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->unattached_reloc) + (info, h->root.root.string, input_bfd, + input_section, r_vaddr - input_section->vma); } relocation = alpha_convert_external_reloc (output_bfd, @@ -1896,11 +1888,9 @@ alpha_relocate_section (bfd *output_bfd, } else { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, - input_section, - r_vaddr - input_section->vma, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + r_vaddr - input_section->vma, TRUE); relocation = 0; } } @@ -1942,12 +1932,10 @@ alpha_relocate_section (bfd *output_bfd, else name = bfd_section_name (input_bfd, symndx_to_section[r_symndx]); - if (! ((*info->callbacks->reloc_overflow) - (info, NULL, name, - alpha_howto_table[r_type].name, - (bfd_vma) 0, input_bfd, input_section, - r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, NULL, name, alpha_howto_table[r_type].name, + (bfd_vma) 0, input_bfd, input_section, + r_vaddr - input_section->vma); } break; } @@ -1967,10 +1955,9 @@ alpha_relocate_section (bfd *output_bfd, if (gp_usedp && gp_undefined) { - if (! ((*info->callbacks->reloc_dangerous) - (info, _("GP relative relocation used when GP not defined"), - input_bfd, input_section, r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_dangerous) + (info, _("GP relative relocation used when GP not defined"), + input_bfd, input_section, r_vaddr - input_section->vma); /* Only give the error once per link. */ gp = 4; _bfd_set_gp_value (output_bfd, gp); @@ -2208,7 +2195,7 @@ alpha_ecoff_openr_next_archived_file (bfd *archive, bfd *last_file) BSD-4.4-style element with a long odd size. */ filestart = last_file->proxy_origin + size; filestart += filestart % 2; - if (filestart <= last_file->proxy_origin) + if (filestart < last_file->proxy_origin) { /* Prevent looping. See PR19256. */ bfd_set_error (bfd_error_malformed_archive); @@ -2351,6 +2338,7 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data = #define _bfd_ecoff_section_already_linked \ _bfd_coff_section_already_linked #define _bfd_ecoff_bfd_define_common_symbol bfd_generic_define_common_symbol +#define _bfd_ecoff_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target alpha_ecoff_le_vec = { diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c index 1b2c239..34ae35c 100644 --- a/bfd/coff-arm.c +++ b/bfd/coff-arm.c @@ -1562,12 +1562,9 @@ coff_arm_relocate_section (bfd *output_bfd, } else if (! bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); } /* Emit a reloc if the backend thinks it needs it. */ @@ -1764,11 +1761,10 @@ coff_arm_relocate_section (bfd *output_bfd, return FALSE; } - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } } } diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c index 66de2be..c258306 100644 --- a/bfd/coff-h8300.c +++ b/bfd/coff-h8300.c @@ -647,14 +647,10 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, /* Sanity check. */ if (gap < -128 || gap > 126) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); /* Everything looks OK. Apply the relocation and update the src/dst address appropriately. */ @@ -679,14 +675,10 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, /* Sanity check. */ if (gap > 32766 || gap < -32768) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); /* Everything looks OK. Apply the relocation and update the src/dst address appropriately. */ @@ -769,14 +761,10 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, src_address += 4; } else - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); break; /* A 16-bit absolute branch that is now an 8-bit pc-relative branch. */ @@ -793,14 +781,10 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, /* Sanity check. */ if (gap < -128 || gap > 126) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); /* Now fix the instruction itself. */ switch (data[dst_address - 1]) @@ -840,14 +824,10 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, /* Sanity check. */ if (gap < -128 || gap > 126) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); /* Now fix the instruction. */ switch (data[dst_address - 2]) @@ -1040,14 +1020,10 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, /* Sanity check. */ if (gap < -128 || gap > 126) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); /* Everything looks OK. Fix the condition in the instruction, apply the relocation, and update the src/dst address appropriately. */ @@ -1123,14 +1099,10 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, src_address += 1; } else - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); break; } diff --git a/bfd/coff-h8500.c b/bfd/coff-h8500.c index 8a72af6..1b14634 100644 --- a/bfd/coff-h8500.c +++ b/bfd/coff-h8500.c @@ -244,14 +244,11 @@ extra_case (bfd *in_abfd, word and the pc's been incremented. */ if (gap > 128 || gap < -128) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_8 (in_abfd, gap, data + *dst_ptr); (*dst_ptr)++; (*src_ptr)++; @@ -268,14 +265,11 @@ extra_case (bfd *in_abfd, word and the pc's been incremented. */ if (gap > 32767 || gap < -32768) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_16 (in_abfd, (bfd_vma) gap, data + *dst_ptr); (*dst_ptr) += 2; (*src_ptr) += 2; diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c index 96704c6..b2c1512 100644 --- a/bfd/coff-i960.c +++ b/bfd/coff-i960.c @@ -448,12 +448,9 @@ coff_i960_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, + sec->output_offset); } else if (! bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); } done = FALSE; @@ -473,12 +470,11 @@ coff_i960_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, /* This symbol is apparently not from a COFF input file. We warn, and then assume that it is not a leaf function. */ - if (! ((*info->callbacks->reloc_dangerous) - (info, - _("uncertain calling convention for non-COFF symbol"), - input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_dangerous) + (info, + _("uncertain calling convention for non-COFF symbol"), + input_bfd, input_section, + rel->r_vaddr - input_section->vma); break; case C_LEAFSTAT: case C_LEAFEXT: @@ -555,11 +551,10 @@ coff_i960_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } } } diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c index a99d4fd..002c908 100644 --- a/bfd/coff-mcore.c +++ b/bfd/coff-mcore.c @@ -454,12 +454,9 @@ coff_mcore_relocate_section (bfd * output_bfd, + sec->output_offset); } else - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); my_name = h->root.root.string; } @@ -519,11 +516,10 @@ coff_mcore_relocate_section (bfd * output_bfd, break; case bfd_reloc_overflow: - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), my_name, howto->name, - (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), my_name, howto->name, + (bfd_vma) 0, input_bfd, + input_section, rel->r_vaddr - input_section->vma); } } diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index 9f730a4..dbdf08c 100644 --- a/bfd/coff-mips.c +++ b/bfd/coff-mips.c @@ -940,11 +940,10 @@ mips_relocate_section (bfd *output_bfd, { if (gp_undefined) { - if (! ((*info->callbacks->reloc_dangerous) - (info, _("GP relative relocation used when GP not defined"), - input_bfd, input_section, - int_rel.r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_dangerous) + (info, _("GP relative relocation used when GP not defined"), + input_bfd, input_section, + int_rel.r_vaddr - input_section->vma); /* Only give the error once per link. */ gp = 4; _bfd_set_gp_value (output_bfd, gp); @@ -1075,11 +1074,9 @@ mips_relocate_section (bfd *output_bfd, if (int_rel.r_symndx == -1) { /* This symbol is not being written out. */ - if (! ((*info->callbacks->unattached_reloc) - (info, h->root.root.string, input_bfd, - input_section, - int_rel.r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->unattached_reloc) + (info, h->root.root.string, input_bfd, input_section, + int_rel.r_vaddr - input_section->vma); int_rel.r_symndx = 0; } relocation = 0; @@ -1151,11 +1148,9 @@ mips_relocate_section (bfd *output_bfd, } else { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, - input_section, - int_rel.r_vaddr - input_section->vma, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + int_rel.r_vaddr - input_section->vma, TRUE); relocation = 0; } } @@ -1223,11 +1218,10 @@ mips_relocate_section (bfd *output_bfd, name = NULL; else name = bfd_section_name (input_bfd, s); - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - int_rel.r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + int_rel.r_vaddr - input_section->vma); } break; } diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c index 784e6f0..a931f6a 100644 --- a/bfd/coff-ppc.c +++ b/bfd/coff-ppc.c @@ -1026,12 +1026,9 @@ coff_ppc_relocate_section (bfd *output_bfd, + sec->output_offset); } else - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); } rstat = bfd_reloc_ok; @@ -1423,11 +1420,10 @@ coff_ppc_relocate_section (bfd *output_bfd, name = buf; } - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root.root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root.root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } } } diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index e7a215b..84860db 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -3367,15 +3367,12 @@ xcoff_ppc_relocate_section (bfd *output_bfd, { 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; - } + (*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); + if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) { @@ -3455,11 +3452,10 @@ xcoff_ppc_relocate_section (bfd *output_bfd, } sprintf (reloc_type_name, "0x%02x", rel->r_type); - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, reloc_type_name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, reloc_type_name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } /* Add RELOCATION to the right bits of VALUE_TO_RELOCATE. */ @@ -4014,6 +4010,7 @@ const struct xcoff_dwsect_name xcoff_dwsect_names[] = { #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_check_relocs _bfd_generic_link_check_relocs /* For dynamic symbols and relocs entry points. */ #define _bfd_xcoff_get_synthetic_symtab _bfd_nodynamic_get_synthetic_symtab diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c index 3e0cb7f..cf37ad2 100644 --- a/bfd/coff-sh.c +++ b/bfd/coff-sh.c @@ -2837,12 +2837,9 @@ sh_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, + sec->output_offset); } else if (! bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); } rstat = _bfd_final_link_relocate (howto, input_bfd, input_section, @@ -2875,11 +2872,10 @@ sh_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, name = buf; } - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } } } diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c index 49647bd..99808f1 100644 --- a/bfd/coff-tic80.c +++ b/bfd/coff-tic80.c @@ -563,12 +563,9 @@ coff_tic80_relocate_section (bfd *output_bfd, } else if (! bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); } addr = rel->r_vaddr - input_section->vma; @@ -688,11 +685,10 @@ coff_tic80_relocate_section (bfd *output_bfd, return FALSE; } - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } } } diff --git a/bfd/coff-w65.c b/bfd/coff-w65.c index b0d973a..e73672a 100644 --- a/bfd/coff-w65.c +++ b/bfd/coff-w65.c @@ -315,14 +315,11 @@ w65_reloc16_extra_cases (bfd *abfd, gap -= dot + 1; if (gap < -128 || gap > 127) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_8 (abfd, gap, data + dst_address); dst_address += 1; src_address += 1; @@ -340,14 +337,10 @@ w65_reloc16_extra_cases (bfd *abfd, /* This wraps within the page, so ignore the relativeness, look at the high part. */ if ((gap & 0xf0000) != (dot & 0xf0000)) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); gap -= dot + 2; bfd_put_16 (abfd, gap, data + dst_address); diff --git a/bfd/coff-z80.c b/bfd/coff-z80.c index 13fd6aa..2cab117 100644 --- a/bfd/coff-z80.c +++ b/bfd/coff-z80.c @@ -188,14 +188,11 @@ extra_case (bfd *in_abfd, val = bfd_coff_reloc16_get_value (reloc, link_info, input_section); if (val>127 || val<-128) /* Test for overflow. */ - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_8 (in_abfd, val, data + *dst_ptr); (*dst_ptr) += 1; (*src_ptr) += 1; @@ -247,14 +244,11 @@ extra_case (bfd *in_abfd, the offset. */ if (gap >= 128 || gap < -128) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_8 (in_abfd, gap, data + *dst_ptr); (*dst_ptr)++; (*src_ptr)++; diff --git a/bfd/coff-z8k.c b/bfd/coff-z8k.c index 676fee7..d74cc5c 100644 --- a/bfd/coff-z8k.c +++ b/bfd/coff-z8k.c @@ -263,15 +263,12 @@ extra_case (bfd *in_abfd, if (gap & 1) abort (); gap /= 2; - if (gap > 128 || gap < -128) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + if (gap > 127 || gap < -128) + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_8 (in_abfd, gap, data + *dst_ptr); (*dst_ptr)++; (*src_ptr)++; @@ -293,14 +290,11 @@ extra_case (bfd *in_abfd, gap /= 2; if (gap > 0 || gap < -127) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_8 (in_abfd, (bfd_get_8 ( in_abfd, data + *dst_ptr) & 0x80) + (-gap & 0x7f), data + *dst_ptr); @@ -321,14 +315,11 @@ extra_case (bfd *in_abfd, if (gap & 1) abort (); if (gap > 4096 || gap < -4095) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + gap /= 2; bfd_put_16 (in_abfd, (bfd_get_16 ( in_abfd, data + *dst_ptr) & 0xf000) | (-gap & 0x0fff), @@ -348,14 +339,11 @@ extra_case (bfd *in_abfd, int gap = dst - dot - 2; if (gap > 32767 || gap < -32768) - { - if (! ((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*reloc->sym_ptr_ptr), - reloc->howto->name, reloc->addend, input_section->owner, - input_section, reloc->address))) - abort (); - } + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), + reloc->howto->name, reloc->addend, input_section->owner, + input_section, reloc->address); + bfd_put_16 (in_abfd, (bfd_vma) gap, data + *dst_ptr); (*dst_ptr) += 2; (*src_ptr) += 2; diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index a0bc160..f2a3c16 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -1250,15 +1250,11 @@ xcoff64_ppc_relocate_section (bfd *output_bfd, { 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; - } + (*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); + if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) { @@ -1337,11 +1333,10 @@ xcoff64_ppc_relocate_section (bfd *output_bfd, } sprintf (reloc_type_name, "0x%02x", rel->r_type); - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, reloc_type_name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, reloc_type_name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } /* Add RELOCATION to the right bits of VALUE_TO_RELOCATE. */ @@ -2741,6 +2736,7 @@ const bfd_target rs6000_xcoff64_vec = _bfd_generic_copy_link_hash_symbol_type, _bfd_xcoff_bfd_final_link, _bfd_generic_link_split_section, + _bfd_generic_link_check_relocs, bfd_generic_gc_sections, bfd_generic_lookup_section_flags, bfd_generic_merge_sections, @@ -2999,6 +2995,7 @@ const bfd_target rs6000_xcoff64_aix_vec = _bfd_generic_copy_link_hash_symbol_type, _bfd_xcoff_bfd_final_link, _bfd_generic_link_split_section, + _bfd_generic_link_check_relocs, bfd_generic_gc_sections, bfd_generic_lookup_section_flags, bfd_generic_merge_sections, diff --git a/bfd/coffcode.h b/bfd/coffcode.h index caceab6..eef3fa8 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -4076,6 +4076,8 @@ coff_write_object_contents (bfd * abfd) internal_f.f_flags |= F_DYNLOAD; #endif + memset (&internal_a, 0, sizeof internal_a); + /* Set up architecture-dependent stuff. */ { unsigned int magic = 0; @@ -5478,6 +5480,8 @@ dummy_reloc16_extra_cases (bfd *abfd ATTRIBUTE_UNUSED, _bfd_generic_copy_link_hash_symbol_type #define coff_bfd_link_split_section _bfd_generic_link_split_section +#define coff_bfd_link_check_relocs _bfd_generic_link_check_relocs + #ifndef coff_start_final_link #define coff_start_final_link NULL #endif diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 56864ca..75512fb 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -2691,7 +2691,13 @@ static void fini_reloc_cookie_rels (struct coff_reloc_cookie *cookie, asection *sec) { - if (cookie->rels && coff_section_data (NULL, sec)->relocs != cookie->rels) + if (cookie->rels + /* PR 20401. The relocs may not have been cached, so check first. + If the relocs were loaded by init_reloc_cookie_rels() then this + will be the case. FIXME: Would performance be improved if the + relocs *were* cached ? */ + && coff_section_data (NULL, sec) + && coff_section_data (NULL, sec)->relocs != cookie->rels) free (cookie->rels); } diff --git a/bfd/cofflink.c b/bfd/cofflink.c index 7652cc3..0f6ef59 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -212,8 +212,9 @@ coff_link_check_archive_element (bfd *abfd, if (h->type != bfd_link_hash_undefined) return TRUE; + /* Include this element? */ if (!(*info->callbacks->add_archive_element) (info, abfd, name, &abfd)) - return FALSE; + return TRUE; *pneeded = TRUE; return coff_link_add_object_symbols (abfd, info); @@ -1397,7 +1398,8 @@ mark_relocs (struct coff_final_link_info *flaginfo, bfd *input_bfd) in the relocation table. This will then be picked up in the skip/don't-skip pass. */ for (; irel < irelend; irel++) - flaginfo->sym_indices[ irel->r_symndx ] = -1; + if ((unsigned long) irel->r_symndx < obj_raw_syment_count (input_bfd)) + flaginfo->sym_indices[irel->r_symndx] = -1; } } @@ -2514,10 +2516,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) if (name == NULL) return FALSE; - if (! ((*flaginfo->info->callbacks->unattached_reloc) - (flaginfo->info, name, input_bfd, o, - irel->r_vaddr))) - return FALSE; + (*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, name, input_bfd, o, irel->r_vaddr); } } } @@ -2833,18 +2833,14 @@ _bfd_coff_reloc_link_order (bfd *output_bfd, case bfd_reloc_outofrange: abort (); case bfd_reloc_overflow: - if (! ((*flaginfo->info->callbacks->reloc_overflow) - (flaginfo->info, NULL, - (link_order->type == bfd_section_reloc_link_order - ? bfd_section_name (output_bfd, - link_order->u.reloc.p->u.section) - : link_order->u.reloc.p->u.name), - howto->name, link_order->u.reloc.p->addend, - (bfd *) NULL, (asection *) NULL, (bfd_vma) 0))) - { - free (buf); - return FALSE; - } + (*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, NULL, + (link_order->type == bfd_section_reloc_link_order + ? bfd_section_name (output_bfd, + link_order->u.reloc.p->u.section) + : link_order->u.reloc.p->u.name), + howto->name, link_order->u.reloc.p->addend, + (bfd *) NULL, (asection *) NULL, (bfd_vma) 0); break; } loc = link_order->offset * bfd_octets_per_byte (output_bfd); @@ -2900,10 +2896,9 @@ _bfd_coff_reloc_link_order (bfd *output_bfd, } else { - if (! ((*flaginfo->info->callbacks->unattached_reloc) - (flaginfo->info, link_order->u.reloc.p->u.name, (bfd *) NULL, - (asection *) NULL, (bfd_vma) 0))) - return FALSE; + (*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, link_order->u.reloc.p->u.name, + (bfd *) NULL, (asection *) NULL, (bfd_vma) 0); irel->r_symndx = 0; } } @@ -3007,6 +3002,12 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, else { sec = sections[symndx]; + + /* PR 19623: Relocations against symbols in + the absolute sections should ignored. */ + if (bfd_is_abs_section (sec)) + continue; + val = (sec->output_section->vma + sec->output_offset + sym->n_value); @@ -3062,12 +3063,9 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, } else if (! bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); } /* If the input section defining the symbol has been discarded @@ -3137,11 +3135,10 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, return FALSE; } - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma); } } } diff --git a/bfd/config.bfd b/bfd/config.bfd index 23da321..6400722 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -53,6 +53,7 @@ case $targ in echo "*** Use or1k-*-elf or or1k-*-linux as the target instead" >&2 exit 1 ;; + i370-* | \ sh5*-*-* | sh64*-*-* | \ null) if test "x$enable_obsolete" != xyes; then @@ -93,7 +94,7 @@ targ_cpu=`echo $targ | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` case "${targ_cpu}" in aarch64*) targ_archs="bfd_aarch64_arch bfd_arm_arch";; alpha*) targ_archs=bfd_alpha_arch ;; -am34*|am33_2.0*) targ_archs=bfd_mn10300_arch ;; +am33_2.0*) targ_archs=bfd_mn10300_arch ;; arc*) targ_archs=bfd_arc_arch ;; arm*) targ_archs=bfd_arm_arch ;; bfin*) targ_archs=bfd_bfin_arch ;; @@ -176,7 +177,7 @@ case "${targ}" in targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch" want64=true ;; - aarch64-*-elf) + aarch64-*-elf | aarch64-*-rtems*) targ_defvec=aarch64_elf64_le_vec targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec" want64=true @@ -271,11 +272,16 @@ case "${targ}" in ;; #endif /* BFD64 */ - am34-*-linux* | am33_2.0-*-linux*) + am33_2.0-*-linux*) targ_defvec=am33_elf32_linux_vec ;; - arc*-*-elf* | arc*-*-linux-uclibc*) + arc*eb-*-elf* | arc*eb-*-linux*) + targ_defvec=arc_elf32_be_vec + targ_selvecs=arc_elf32_le_vec + ;; + + arc*-*-elf* | arc*-*-linux*) targ_defvec=arc_elf32_le_vec targ_selvecs=arc_elf32_be_vec ;; @@ -348,6 +354,10 @@ case "${targ}" in targ_selvecs=arm_coff_be_vec targ_underscore=yes ;; + arm-*-phoenix*) + targ_defvec=arm_elf32_le_vec + targ_selvecs=arm_elf32_be_vec + ;; arm-*-rtems*) targ_defvec=arm_elf32_le_vec targ_selvecs=arm_elf32_be_vec @@ -541,6 +551,7 @@ case "${targ}" in targ_defvec=i370_elf32_vec targ_selvecs="i370_elf32_vec" ;; + i[3-7]86-*-sco3.2v5*coff) targ_defvec=i386_coff_vec targ_selvecs=i386_elf32_vec @@ -687,7 +698,7 @@ case "${targ}" in targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec" want64=true ;; - x86_64-*-elf*) + x86_64-*-elf* | x86_64-*-rtems*) targ_defvec=x86_64_elf64_vec targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec l1om_elf64_vec k1om_elf64_vec" want64=true @@ -1074,15 +1085,11 @@ case "${targ}" in targ_defvec=mips_elf32_trad_be_vec targ_selvecs="mips_elf32_trad_le_vec mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec" ;; - mips*el-*-elf* | mips*el-*-vxworks* | mips*-*-chorus*) + mips*el-*-elf* | mips*-*-chorus*) targ_defvec=mips_elf32_le_vec targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec" ;; - mips*-*-elf* | mips*-*-rtems* | mips*-*-vxworks | mips*-*-windiss) - targ_defvec=mips_elf32_be_vec - targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec" - ;; - mips*-*-none) + mips*-*-elf* | mips*-*-rtems* | mips*-*-windiss | mips*-*-none) targ_defvec=mips_elf32_be_vec targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec" ;; diff --git a/bfd/config.in b/bfd/config.in index 58248bd..341afae 100644 --- a/bfd/config.in +++ b/bfd/config.in @@ -337,6 +337,9 @@ /* Name of host specific header file to include in trad-core.c. */ #undef TRAD_HEADER +/* Define if we should use 64-bit archives. */ +#undef USE_64_BIT_ARCHIVE + /* Use b modifier when opening binary files? */ #undef USE_BINARY_FOPEN @@ -349,9 +352,6 @@ /* Define if we should default to creating read-only plt entries */ #undef USE_SECUREPLT -/* 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 diff --git a/bfd/configure b/bfd/configure index c376644..3e03324 100755 --- a/bfd/configure +++ b/bfd/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for bfd 2.26.51. +# Generated by GNU Autoconf 2.64 for bfd 2.27.51. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software @@ -556,8 +556,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bfd' PACKAGE_TARNAME='bfd' -PACKAGE_VERSION='2.26.51' -PACKAGE_STRING='bfd 2.26.51' +PACKAGE_VERSION='2.27.51' +PACKAGE_STRING='bfd 2.27.51' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -657,6 +657,7 @@ GENINSRC_NEVER_TRUE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE +WARN_WRITE_STRINGS NO_WERROR WARN_CFLAGS REPORT_BUGS_TEXI @@ -687,6 +688,7 @@ AR am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE +am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE @@ -787,11 +789,11 @@ enable_plugins enable_largefile enable_64_bit_bfd enable_targets +enable_64_bit_archive with_mmap enable_secureplt enable_leading_mingw64_underscores with_separate_debug_dir -enable_elf_stt_common with_pkgversion with_bugurl enable_werror @@ -1351,7 +1353,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bfd 2.26.51 to adapt to many kinds of systems. +\`configure' configures bfd 2.27.51 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1422,7 +1424,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bfd 2.26.51:";; + short | recursive ) echo "Configuration of bfd 2.27.51:";; esac cat <<\_ACEOF @@ -1441,10 +1443,10 @@ Optional Features: --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-64-bit-archive force 64-bit archives --enable-secureplt Default to creating read-only plt entries --enable-leading-mingw64-underscores Enable leading underscores on 64 bit mingw targets - --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 @@ -1543,7 +1545,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bfd configure 2.26.51 +bfd configure 2.27.51 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2185,7 +2187,7 @@ 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 bfd $as_me 2.26.51, which was +It was created by bfd $as_me 2.27.51, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -3961,6 +3963,7 @@ fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' + am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= @@ -3993,7 +3996,7 @@ fi # Define the identity of the package. PACKAGE='bfd' - VERSION='2.26.51' + VERSION='2.27.51' cat >>confdefs.h <<_ACEOF @@ -4023,11 +4026,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. -# Always define AMTAR for backward compatibility. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' @@ -4045,6 +4048,7 @@ else # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. + rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. @@ -4104,7 +4108,7 @@ else break fi ;; - msvisualcpp | msvcmsys) + msvc7 | msvc7msys | 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. @@ -11423,7 +11427,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11426 "configure" +#line 11430 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11529,7 +11533,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11532 "configure" +#line 11536 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12127,6 +12131,17 @@ if test "${enable_targets+set}" = set; then : esac fi +# Check whether --enable-64_bit_archive was given. +if test "${enable_64_bit_archive+set}" = set; then : + enableval=$enable_64_bit_archive; case "${enableval}" in + yes) want_64_bit_archive=true ;; + no) want_64_bit_archive=false ;; + *) as_fn_error "bad value ${enableval} for 64-bit-archive option" "$LINENO" 5 ;; +esac +else + want_64_bit_archive=unset +fi + # Check whether --with-mmap was given. if test "${with_mmap+set}" = set; then : @@ -12175,29 +12190,6 @@ 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. @@ -12248,7 +12240,10 @@ fi # Set the 'development' global. . $srcdir/../bfd/development.sh +# Default set of GCC warnings to enable. GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + +# Add -Wshadow if the compiler is a sufficiently recent version of GCC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ __GNUC__ @@ -12262,6 +12257,35 @@ fi rm -f conftest* +# Add -Wstack-usage if the compiler is a sufficiently recent version of GCC. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +__GNUC__ +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "^[0-4]$" >/dev/null 2>&1; then : + +else + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wstack-usage=262144" +fi +rm -f conftest* + + +# Set WARN_WRITE_STRINGS if the compiler supports -Wwrite-strings. +WARN_WRITE_STRINGS="" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +__GNUC__ +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "^[0-3]$" >/dev/null 2>&1; then : + +else + WARN_WRITE_STRINGS="-Wwrite-strings" +fi +rm -f conftest* + + # Check whether --enable-werror was given. if test "${enable_werror+set}" = set; then : enableval=$enable_werror; case "${enableval}" in @@ -12321,6 +12345,7 @@ fi + ac_config_headers="$ac_config_headers config.h:config.in" @@ -12426,7 +12451,7 @@ bfd_default_target_size=32 # host stuff: -ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru uk" +ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru uk sr" # If we haven't got the data from the intl directory, # assume NLS is disabled. USE_NLS=no @@ -14584,6 +14609,23 @@ else # all_targets is true selarchs=`echo $selarchs | sed -e 's/^/\&/' -e 's/ \(.\)/,\&\1/g'` fi # all_targets is true +if test "x$want_64_bit_archive" = xunset; then + # 64-bit MIPS and s390 ELF targets use 64-bit archives. + case "${bfd_backends}" in + *elf64-mips* | *elf64-s390*) + want_64_bit_archive=true + ;; + esac +fi + +# 64-bit archives need a 64-bit bfd_vma. +if test "x$want_64_bit_archive" = xtrue; then + want64=true + +$as_echo "#define USE_64_BIT_ARCHIVE 1" >>confdefs.h + +fi + case ${host64}-${target64}-${want64} in *true*) wordsize=64 @@ -16534,7 +16576,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bfd $as_me 2.26.51, which was +This file was extended by bfd $as_me 2.27.51, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16598,7 +16640,7 @@ Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -bfd config.status 2.26.51 +bfd config.status 2.27.51 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/bfd/configure.ac b/bfd/configure.ac index b69891c..669cff7 100644 --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -68,6 +68,15 @@ AC_ARG_ENABLE(targets, *) enable_targets=$enableval ;; esac])dnl +AC_ARG_ENABLE(64_bit_archive, + AS_HELP_STRING([--enable-64-bit-archive], + [force 64-bit archives]), +[case "${enableval}" in + yes) want_64_bit_archive=true ;; + no) want_64_bit_archive=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for 64-bit-archive option) ;; +esac],[want_64_bit_archive=unset])dnl + AC_ARG_WITH(mmap, [ --with-mmap try using mmap for BFD input files if available], [case "${withval}" in @@ -103,26 +112,6 @@ AC_ARG_WITH(separate-debug-dir, [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/]) @@ -154,7 +143,7 @@ bfd_default_target_size=32 # host stuff: -ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru uk" +ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru uk sr" ZW_GNU_GETTEXT_SISTER_DIR AM_PO_SUBDIRS @@ -795,6 +784,22 @@ else # all_targets is true selarchs=`echo $selarchs | sed -e 's/^/\&/' -e 's/ \(.\)/,\&\1/g'` fi # all_targets is true +if test "x$want_64_bit_archive" = xunset; then + # 64-bit MIPS and s390 ELF targets use 64-bit archives. + case "${bfd_backends}" in + *elf64-mips* | *elf64-s390*) + want_64_bit_archive=true + ;; + esac +fi + +# 64-bit archives need a 64-bit bfd_vma. +if test "x$want_64_bit_archive" = xtrue; then + want64=true + AC_DEFINE(USE_64_BIT_ARCHIVE, 1, + [Define if we should use 64-bit archives.]) +fi + case ${host64}-${target64}-${want64} in *true*) wordsize=64 diff --git a/bfd/cpu-arm.c b/bfd/cpu-arm.c index 698ad03..3e1622c 100644 --- a/bfd/cpu-arm.c +++ b/bfd/cpu-arm.c @@ -93,7 +93,8 @@ processors[] = { bfd_mach_arm_XScale, "xscale" }, { bfd_mach_arm_ep9312, "ep9312" }, { bfd_mach_arm_iWMMXt, "iwmmxt" }, - { bfd_mach_arm_iWMMXt2, "iwmmxt2" } + { bfd_mach_arm_iWMMXt2, "iwmmxt2" }, + { bfd_mach_arm_unknown, "arm_any" } }; static bfd_boolean @@ -128,19 +129,20 @@ scan (const struct bfd_arch_info *info, const char *string) static const bfd_arch_info_type arch_info_struct[] = { - N (bfd_mach_arm_2, "armv2", FALSE, & arch_info_struct[1]), - N (bfd_mach_arm_2a, "armv2a", FALSE, & arch_info_struct[2]), - N (bfd_mach_arm_3, "armv3", FALSE, & arch_info_struct[3]), - N (bfd_mach_arm_3M, "armv3m", FALSE, & arch_info_struct[4]), - N (bfd_mach_arm_4, "armv4", FALSE, & arch_info_struct[5]), - N (bfd_mach_arm_4T, "armv4t", FALSE, & arch_info_struct[6]), - N (bfd_mach_arm_5, "armv5", FALSE, & arch_info_struct[7]), - N (bfd_mach_arm_5T, "armv5t", FALSE, & arch_info_struct[8]), - N (bfd_mach_arm_5TE, "armv5te", FALSE, & arch_info_struct[9]), - N (bfd_mach_arm_XScale, "xscale", FALSE, & arch_info_struct[10]), - N (bfd_mach_arm_ep9312, "ep9312", FALSE, & arch_info_struct[11]), - N (bfd_mach_arm_iWMMXt, "iwmmxt", FALSE, & arch_info_struct[12]), - N (bfd_mach_arm_iWMMXt2, "iwmmxt2", FALSE, NULL) + N (bfd_mach_arm_2, "armv2", FALSE, & arch_info_struct[1]), + N (bfd_mach_arm_2a, "armv2a", FALSE, & arch_info_struct[2]), + N (bfd_mach_arm_3, "armv3", FALSE, & arch_info_struct[3]), + N (bfd_mach_arm_3M, "armv3m", FALSE, & arch_info_struct[4]), + N (bfd_mach_arm_4, "armv4", FALSE, & arch_info_struct[5]), + N (bfd_mach_arm_4T, "armv4t", FALSE, & arch_info_struct[6]), + N (bfd_mach_arm_5, "armv5", FALSE, & arch_info_struct[7]), + N (bfd_mach_arm_5T, "armv5t", FALSE, & arch_info_struct[8]), + N (bfd_mach_arm_5TE, "armv5te", FALSE, & arch_info_struct[9]), + N (bfd_mach_arm_XScale, "xscale", FALSE, & arch_info_struct[10]), + N (bfd_mach_arm_ep9312, "ep9312", FALSE, & arch_info_struct[11]), + N (bfd_mach_arm_iWMMXt, "iwmmxt", FALSE, & arch_info_struct[12]), + N (bfd_mach_arm_iWMMXt2, "iwmmxt2", FALSE, & arch_info_struct[13]), + N (bfd_mach_arm_unknown, "arm_any", FALSE, NULL) }; const bfd_arch_info_type bfd_arm_arch = @@ -365,7 +367,8 @@ architectures[] = { "XScale", bfd_mach_arm_XScale }, { "ep9312", bfd_mach_arm_ep9312 }, { "iWMMXt", bfd_mach_arm_iWMMXt }, - { "iWMMXt2", bfd_mach_arm_iWMMXt2 } + { "iWMMXt2", bfd_mach_arm_iWMMXt2 }, + { "arm_any", bfd_mach_arm_unknown } }; /* Extract the machine number stored in a note section. */ diff --git a/bfd/cpu-powerpc.c b/bfd/cpu-powerpc.c index 5b77317..fd72cd1 100644 --- a/bfd/cpu-powerpc.c +++ b/bfd/cpu-powerpc.c @@ -35,6 +35,10 @@ powerpc_compatible (const bfd_arch_info_type *a, default: return NULL; case bfd_arch_powerpc: + if (a->mach == bfd_mach_ppc_vle && b->bits_per_word == 32) + return a; + if (b->mach == bfd_mach_ppc_vle && a->bits_per_word == 32) + return b; return bfd_default_compatible (a, b); case bfd_arch_rs6000: if (b->mach == bfd_mach_rs6k) diff --git a/bfd/cpu-sparc.c b/bfd/cpu-sparc.c index 0d25012..8de7250 100644 --- a/bfd/cpu-sparc.c +++ b/bfd/cpu-sparc.c @@ -157,6 +157,156 @@ static const bfd_arch_info_type arch_info_struct[] = bfd_default_compatible, bfd_default_scan, bfd_arch_default_fill, + &arch_info_struct[9], + }, + { + 32, /* bits in a word */ + 32, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v8plusc, + "sparc", + "sparc:v8plusc", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[10], + }, + { + 64, /* bits in a word */ + 64, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v9c, + "sparc", + "sparc:v9c", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[11], + }, + { + 32, /* bits in a word */ + 32, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v8plusd, + "sparc", + "sparc:v8plusd", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[12], + }, + { + 64, /* bits in a word */ + 64, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v9d, + "sparc", + "sparc:v9d", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[13], + }, + { + 32, /* bits in a word */ + 32, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v8pluse, + "sparc", + "sparc:v8pluse", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[14], + }, + { + 64, /* bits in a word */ + 64, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v9e, + "sparc", + "sparc:v9e", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[15], + }, + { + 32, /* bits in a word */ + 32, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v8plusv, + "sparc", + "sparc:v8plusv", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[16], + }, + { + 64, /* bits in a word */ + 64, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v9v, + "sparc", + "sparc:v9v", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[17], + }, + { + 32, /* bits in a word */ + 32, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v8plusm, + "sparc", + "sparc:v8plusm", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, + &arch_info_struct[18], + }, + { + 64, /* bits in a word */ + 64, /* bits in an address */ + 8, /* bits in a byte */ + bfd_arch_sparc, + bfd_mach_sparc_v9m, + "sparc", + "sparc:v9m", + 3, + FALSE, + bfd_default_compatible, + bfd_default_scan, + bfd_arch_default_fill, 0, } }; diff --git a/bfd/cpu-v850.c b/bfd/cpu-v850.c index 472c578..d82d4c0 100644 --- a/bfd/cpu-v850.c +++ b/bfd/cpu-v850.c @@ -24,7 +24,7 @@ #include "safe-ctype.h" #define N(number, print, default, next) \ -{ 32, 32, 8, bfd_arch_v850, number, "v850", print " (using old gcc ABI)", 2, default, \ +{ 32, 32, 8, bfd_arch_v850, number, "v850", print ":old-gcc-abi", 2, default, \ bfd_default_compatible, bfd_default_scan, bfd_arch_default_fill, next } #define NEXT NULL diff --git a/bfd/cpu-v850_rh850.c b/bfd/cpu-v850_rh850.c index 3b58887..5639e91 100644 --- a/bfd/cpu-v850_rh850.c +++ b/bfd/cpu-v850_rh850.c @@ -34,8 +34,9 @@ static const bfd_arch_info_type arch_info_struct[] = R (bfd_mach_v850e2v3, "v850e2v3", FALSE, & arch_info_struct[3]), R (bfd_mach_v850e2, "v850e2", FALSE, & arch_info_struct[4]), R (bfd_mach_v850e1, "v850e1", FALSE, & arch_info_struct[5]), - R (bfd_mach_v850e, "v850e", FALSE, NULL) + R (bfd_mach_v850e, "v850e", FALSE, & arch_info_struct[6]), + R (bfd_mach_v850, "v850-rh850", FALSE, NULL) /* For backwards compatibility. */ }; const bfd_arch_info_type bfd_v850_rh850_arch = - R (bfd_mach_v850, "v850-rh850", TRUE, & arch_info_struct[0]); + R (bfd_mach_v850, "v850:rh850", TRUE, & arch_info_struct[0]); diff --git a/bfd/doc/Makefile.in b/bfd/doc/Makefile.in index 1061a5c..be737f6 100644 --- a/bfd/doc/Makefile.in +++ b/bfd/doc/Makefile.in @@ -1,9 +1,9 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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. @@ -33,6 +33,23 @@ # . # VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -104,6 +121,11 @@ TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -125,6 +147,12 @@ am__nobase_list = $(am__nobase_strip_setup); \ am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ @@ -220,6 +248,7 @@ TDEFINES = @TDEFINES@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ +WARN_WRITE_STRINGS = @WARN_WRITE_STRINGS@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -504,9 +533,7 @@ uninstall-html-am: uninstall-info-am: @$(PRE_UNINSTALL) - @if test -d '$(DESTDIR)$(infodir)' && \ - (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ @@ -597,10 +624,15 @@ install-am: all-am installcheck: installcheck-am install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) @@ -642,8 +674,11 @@ install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) - test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -658,18 +693,22 @@ 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=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ + fi; \ 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 \ + d2=$$d$$p; \ + if test -d "$$d2"; 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 $$?; \ + echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ - list2="$$list2 $$d$$p"; \ + list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ @@ -681,9 +720,12 @@ install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) - test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ + fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ @@ -701,8 +743,7 @@ install-info-am: $(INFO_DEPS) 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 \ + @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ @@ -716,8 +757,11 @@ install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) - test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -729,8 +773,11 @@ install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) - test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" @list='$(PSS)'; test -n "$(psdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ diff --git a/bfd/doc/archures.texi b/bfd/doc/archures.texi index c6b273f..97037d8 100644 --- a/bfd/doc/archures.texi +++ b/bfd/doc/archures.texi @@ -104,13 +104,29 @@ enum bfd_architecture #define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ #define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ #define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ +#define bfd_mach_sparc_v8plusc 11 /* with UA2005 and T1 add'ns. */ +#define bfd_mach_sparc_v9c 12 /* with UA2005 and T1 add'ns. */ +#define bfd_mach_sparc_v8plusd 13 /* with UA2007 and T3 add'ns. */ +#define bfd_mach_sparc_v9d 14 /* with UA2007 and T3 add'ns. */ +#define bfd_mach_sparc_v8pluse 15 /* with OSA2001 and T4 add'ns (no IMA). */ +#define bfd_mach_sparc_v9e 16 /* with OSA2001 and T4 add'ns (no IMA). */ +#define bfd_mach_sparc_v8plusv 17 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */ +#define bfd_mach_sparc_v9v 18 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */ +#define bfd_mach_sparc_v8plusm 19 /* with OSA2015 and M7 add'ns. */ +#define bfd_mach_sparc_v9m 20 /* with OSA2015 and M7 add'ns. */ /* Nonzero if MACH has the v9 instruction set. */ #define bfd_mach_sparc_v9_p(mach) \ - ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ + ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9m \ && (mach) != bfd_mach_sparc_sparclite_le) /* Nonzero if MACH is a 64 bit sparc architecture. */ #define bfd_mach_sparc_64bit_p(mach) \ - ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) + ((mach) >= bfd_mach_sparc_v9 \ + && (mach) != bfd_mach_sparc_v8plusb \ + && (mach) != bfd_mach_sparc_v8plusc \ + && (mach) != bfd_mach_sparc_v8plusd \ + && (mach) != bfd_mach_sparc_v8pluse \ + && (mach) != bfd_mach_sparc_v8plusv \ + && (mach) != bfd_mach_sparc_v8plusm) bfd_arch_spu, /* PowerPC SPU */ #define bfd_mach_spu 256 bfd_arch_mips, /* MIPS Rxxxx */ diff --git a/bfd/doc/bfd.info b/bfd/doc/bfd.info index c52885b..5f23d93 100644 --- a/bfd/doc/bfd.info +++ b/bfd/doc/bfd.info @@ -340,7 +340,7 @@ major data about the file and pointers to the rest of the data. enum bfd_plugin_format { - bfd_plugin_uknown = 0, + bfd_plugin_unknown = 0, bfd_plugin_yes = 1, bfd_plugin_no = 2 }; @@ -385,7 +385,7 @@ major data about the file and pointers to the rest of the data. ENUM_BITFIELD (bfd_direction) direction : 2; /* Format_specific flags. */ - flagword flags : 18; + flagword flags : 20; /* 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 @@ -465,16 +465,23 @@ major data about the file and pointers to the rest of the data. /* Compress sections in this BFD with SHF_COMPRESSED from gABI. */ #define BFD_COMPRESS_GABI 0x20000 + /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this + BFD. */ + #define BFD_CONVERT_ELF_COMMON 0x40000 + + /* Use the ELF STT_COMMON type in this BFD. */ + #define BFD_USE_ELF_STT_COMMON 0x80000 + /* Flags bits to be saved in bfd_preserve_save. */ #define BFD_FLAGS_SAVED \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN \ - | BFD_COMPRESS_GABI) + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) /* Flags bits which are for BFD use only. */ #define BFD_FLAGS_FOR_BFD_USE_MASK \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ - | BFD_COMPRESS_GABI) + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) /* Is the file descriptor being cached? That is, can it be closed as needed, and re-opened when accessed later? */ @@ -1699,8 +1706,8 @@ Here is the section structure: when memory read flag isn't set. */ #define SEC_COFF_NOREAD 0x40000000 - /* Indicate that section has the no read flag set. */ - #define SEC_ELF_NOREAD 0x80000000 + /* Indicate that section has the purecode flag set. */ + #define SEC_ELF_PURECODE 0x80000000 /* End of section flags. */ @@ -1768,7 +1775,7 @@ Here is the section structure: information. */ bfd_vma lma; - /* The size of the section in octets, as it will be output. + /* The size of the section in *octets*, as it will be output. Contains a value even if the section has no contents (e.g., the size of .bss). */ bfd_size_type size; @@ -2587,8 +2594,7 @@ An 'asymbol' has the form: #define BSF_EXPORT BSF_GLOBAL /* No real difference. */ /* A normal C symbol would be one of: - BSF_LOCAL, BSF_COMMON, BSF_UNDEFINED or - BSF_GLOBAL. */ + BSF_LOCAL, BSF_UNDEFINED or BSF_GLOBAL. */ /* The symbol is a debugging record. The value has an arbitrary meaning, unless BSF_DEBUGGING_RELOC is also set. */ @@ -2600,7 +2606,9 @@ An 'asymbol' has the form: /* Used by the linker. */ #define BSF_KEEP (1 << 5) - #define BSF_KEEP_G (1 << 6) + + /* An ELF common symbol. */ + #define BSF_ELF_COMMON (1 << 6) /* A weak global symbol, overridable without warnings by a regular global symbol of the same name. */ @@ -3836,6 +3844,8 @@ attributes. -- : BFD_RELOC_MICROMIPS_10_PCREL_S1 -- : BFD_RELOC_MICROMIPS_16_PCREL_S1 microMIPS PC-relative relocations. + -- : BFD_RELOC_MIPS16_16_PCREL_S1 + MIPS16 PC-relative relocation. -- : BFD_RELOC_MIPS_21_PCREL_S2 -- : BFD_RELOC_MIPS_26_PCREL_S2 -- : BFD_RELOC_MIPS_18_PCREL_S3 @@ -4516,6 +4526,7 @@ attributes. -- : BFD_RELOC_ARC_TLS_LE_32 -- : BFD_RELOC_ARC_S25W_PCREL_PLT -- : BFD_RELOC_ARC_S21H_PCREL_PLT + -- : BFD_RELOC_ARC_NPS_CMEM16 ARC relocs. -- : BFD_RELOC_BFIN_16_IMM ADI Blackfin 16 bit immediate absolute reloc. @@ -6124,6 +6135,8 @@ attributes. relocation enumerators. N.B. the order of the enumerators is important as several tables in the AArch64 bfd backend are indexed by these enumerators; make sure they are all synced. + -- : BFD_RELOC_AARCH64_NULL + Deprecated AArch64 null relocation code. -- : BFD_RELOC_AARCH64_NONE AArch64 null relocation code. -- : BFD_RELOC_AARCH64_64 @@ -7200,6 +7213,7 @@ BFD_JUMP_TABLE macros. NAME##_bfd_copy_link_hash_symbol_type, \ NAME##_bfd_final_link, \ NAME##_bfd_link_split_section, \ + NAME##_bfd_link_check_relocs, \ NAME##_bfd_gc_sections, \ NAME##_bfd_lookup_section_flags, \ NAME##_bfd_merge_sections, \ @@ -7241,6 +7255,9 @@ BFD_JUMP_TABLE macros. /* Should this section be split up into smaller pieces during linking. */ bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); + /* Check the relocations in the bfd for validity. */ + bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *); + /* Remove sections that are not referenced from the output. */ bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); @@ -7366,18 +7383,17 @@ set it to the architecture string specified by the target_name. Return a freshly malloced NULL-terminated vector of the names of all the valid BFD targets. Do not modify the names. -2.12.1.5 'bfd_seach_for_target' -............................... +2.12.1.5 'bfd_iterate_over_targets' +................................... *Synopsis* - const bfd_target *bfd_search_for_target - (int (*search_func) (const bfd_target *, void *), - void *); + const bfd_target *bfd_iterate_over_targets + (int (*func) (const bfd_target *, void *), + void *data); *Description* -Return a pointer to the first transfer vector in the list of transfer -vectors maintained by BFD that produces a non-zero result when passed to -the function SEARCH_FUNC. The parameter DATA is passed, unexamined, to -the search function. +Call FUNC for each target in the list of BFD target vectors, passing +DATA to FUNC. Stop iterating if FUNC returns a non-zero result, and +return that target vector. Return NULL if FUNC always returns zero. 2.12.1.6 'bfd_flavour_name' ........................... @@ -7495,13 +7511,29 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ #define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ #define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ + #define bfd_mach_sparc_v8plusc 11 /* with UA2005 and T1 add'ns. */ + #define bfd_mach_sparc_v9c 12 /* with UA2005 and T1 add'ns. */ + #define bfd_mach_sparc_v8plusd 13 /* with UA2007 and T3 add'ns. */ + #define bfd_mach_sparc_v9d 14 /* with UA2007 and T3 add'ns. */ + #define bfd_mach_sparc_v8pluse 15 /* with OSA2001 and T4 add'ns (no IMA). */ + #define bfd_mach_sparc_v9e 16 /* with OSA2001 and T4 add'ns (no IMA). */ + #define bfd_mach_sparc_v8plusv 17 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */ + #define bfd_mach_sparc_v9v 18 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */ + #define bfd_mach_sparc_v8plusm 19 /* with OSA2015 and M7 add'ns. */ + #define bfd_mach_sparc_v9m 20 /* with OSA2015 and M7 add'ns. */ /* Nonzero if MACH has the v9 instruction set. */ #define bfd_mach_sparc_v9_p(mach) \ - ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ + ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9m \ && (mach) != bfd_mach_sparc_sparclite_le) /* Nonzero if MACH is a 64 bit sparc architecture. */ #define bfd_mach_sparc_64bit_p(mach) \ - ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) + ((mach) >= bfd_mach_sparc_v9 \ + && (mach) != bfd_mach_sparc_v8plusb \ + && (mach) != bfd_mach_sparc_v8plusc \ + && (mach) != bfd_mach_sparc_v8plusd \ + && (mach) != bfd_mach_sparc_v8pluse \ + && (mach) != bfd_mach_sparc_v8plusv \ + && (mach) != bfd_mach_sparc_v8plusm) bfd_arch_spu, /* PowerPC SPU */ #define bfd_mach_spu 256 bfd_arch_mips, /* MIPS Rxxxx */ @@ -9152,6 +9184,28 @@ and NULL on failure; also sets the output 'hide' boolean parameter. Search an elf version script tree for symbol versioning info for a given symbol. Return TRUE if the symbol is hidden. +2.17.3.9 'bfd_link_check_relocs' +................................ + +*Synopsis* + bfd_boolean bfd_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); + *Description* +Checks the relocs in ABFD for validity. Does not execute the relocs. +Return TRUE if everything is OK, FALSE otherwise. This is the external +entry point to this code. + +2.17.3.10 '_bfd_generic_link_check_relocs' +.......................................... + +*Synopsis* + bfd_boolean _bfd_generic_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); + *Description* +Stub function for targets that do not implement reloc checking. Return +TRUE. This is an internal function. It should not be called from +outside the BFD library. +  File: bfd.info, Node: Hash Tables, Prev: Linker Functions, Up: BFD front end @@ -11136,6 +11190,8 @@ BFD Index (line 15) * _bfd_generic_link_add_one_symbol: Adding symbols from an object file. (line 19) +* _bfd_generic_link_check_relocs: Writing the symbol table. + (line 116) * _bfd_generic_make_empty_symbol: symbol handling functions. (line 96) * _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table. @@ -11161,32 +11217,32 @@ BFD Index * bfd_alloc2: Opening and Closing. (line 247) * bfd_alt_mach_code: Miscellaneous. (line 302) -* bfd_arch_bits_per_address: Architectures. (line 611) -* bfd_arch_bits_per_byte: Architectures. (line 603) -* bfd_arch_default_fill: Architectures. (line 692) -* bfd_arch_get_compatible: Architectures. (line 546) -* bfd_arch_list: Architectures. (line 537) -* bfd_arch_mach_octets_per_byte: Architectures. (line 680) -* BFD_ARELOC_BFIN_ADD: howto manager. (line 1085) -* BFD_ARELOC_BFIN_ADDR: howto manager. (line 1119) -* BFD_ARELOC_BFIN_AND: howto manager. (line 1099) -* BFD_ARELOC_BFIN_COMP: howto manager. (line 1113) -* BFD_ARELOC_BFIN_CONST: howto manager. (line 1083) -* BFD_ARELOC_BFIN_DIV: howto manager. (line 1091) -* BFD_ARELOC_BFIN_HWPAGE: howto manager. (line 1117) -* BFD_ARELOC_BFIN_LAND: howto manager. (line 1105) -* BFD_ARELOC_BFIN_LEN: howto manager. (line 1109) -* BFD_ARELOC_BFIN_LOR: howto manager. (line 1107) -* BFD_ARELOC_BFIN_LSHIFT: howto manager. (line 1095) -* BFD_ARELOC_BFIN_MOD: howto manager. (line 1093) -* BFD_ARELOC_BFIN_MULT: howto manager. (line 1089) -* BFD_ARELOC_BFIN_NEG: howto manager. (line 1111) -* BFD_ARELOC_BFIN_OR: howto manager. (line 1101) -* BFD_ARELOC_BFIN_PAGE: howto manager. (line 1115) -* BFD_ARELOC_BFIN_PUSH: howto manager. (line 1081) -* BFD_ARELOC_BFIN_RSHIFT: howto manager. (line 1097) -* BFD_ARELOC_BFIN_SUB: howto manager. (line 1087) -* BFD_ARELOC_BFIN_XOR: howto manager. (line 1103) +* bfd_arch_bits_per_address: Architectures. (line 627) +* bfd_arch_bits_per_byte: Architectures. (line 619) +* bfd_arch_default_fill: Architectures. (line 708) +* bfd_arch_get_compatible: Architectures. (line 562) +* bfd_arch_list: Architectures. (line 553) +* bfd_arch_mach_octets_per_byte: Architectures. (line 696) +* BFD_ARELOC_BFIN_ADD: howto manager. (line 1088) +* BFD_ARELOC_BFIN_ADDR: howto manager. (line 1122) +* BFD_ARELOC_BFIN_AND: howto manager. (line 1102) +* BFD_ARELOC_BFIN_COMP: howto manager. (line 1116) +* BFD_ARELOC_BFIN_CONST: howto manager. (line 1086) +* BFD_ARELOC_BFIN_DIV: howto manager. (line 1094) +* BFD_ARELOC_BFIN_HWPAGE: howto manager. (line 1120) +* BFD_ARELOC_BFIN_LAND: howto manager. (line 1108) +* BFD_ARELOC_BFIN_LEN: howto manager. (line 1112) +* BFD_ARELOC_BFIN_LOR: howto manager. (line 1110) +* BFD_ARELOC_BFIN_LSHIFT: howto manager. (line 1098) +* BFD_ARELOC_BFIN_MOD: howto manager. (line 1096) +* BFD_ARELOC_BFIN_MULT: howto manager. (line 1092) +* BFD_ARELOC_BFIN_NEG: howto manager. (line 1114) +* BFD_ARELOC_BFIN_OR: howto manager. (line 1104) +* BFD_ARELOC_BFIN_PAGE: howto manager. (line 1118) +* BFD_ARELOC_BFIN_PUSH: howto manager. (line 1084) +* BFD_ARELOC_BFIN_RSHIFT: howto manager. (line 1100) +* BFD_ARELOC_BFIN_SUB: howto manager. (line 1090) +* BFD_ARELOC_BFIN_XOR: howto manager. (line 1106) * bfd_cache_close: File Caching. (line 25) * bfd_cache_close_all: File Caching. (line 38) * bfd_cache_init: File Caching. (line 17) @@ -11220,11 +11276,11 @@ BFD Index (line 386) * bfd_decode_symclass: symbol handling functions. (line 116) -* bfd_default_arch_struct: Architectures. (line 558) -* bfd_default_compatible: Architectures. (line 620) -* bfd_default_reloc_type_lookup: howto manager. (line 3171) -* bfd_default_scan: Architectures. (line 629) -* bfd_default_set_arch_mach: Architectures. (line 576) +* bfd_default_arch_struct: Architectures. (line 574) +* bfd_default_compatible: Architectures. (line 636) +* bfd_default_reloc_type_lookup: howto manager. (line 3176) +* bfd_default_scan: Architectures. (line 645) +* bfd_default_set_arch_mach: Architectures. (line 592) * bfd_demangle: Miscellaneous. (line 353) * bfd_emul_get_commonpagesize: Miscellaneous. (line 333) * bfd_emul_get_maxpagesize: Miscellaneous. (line 313) @@ -11235,10 +11291,10 @@ BFD Index (line 56) * bfd_fill_in_gnu_debuglink_section: Opening and Closing. (line 400) -* bfd_find_target: bfd_target. (line 474) +* bfd_find_target: bfd_target. (line 478) * bfd_find_version_for_sym: Writing the symbol table. (line 83) -* bfd_flavour_name: bfd_target. (line 538) +* bfd_flavour_name: bfd_target. (line 541) * bfd_follow_gnu_debugaltlink: Opening and Closing. (line 366) * bfd_follow_gnu_debuglink: Opening and Closing. @@ -11249,16 +11305,16 @@ BFD Index * bfd_generic_define_common_symbol: Writing the symbol table. (line 69) * bfd_generic_discard_group: section prototypes. (line 312) -* bfd_generic_gc_sections: howto manager. (line 3202) -* bfd_generic_get_relocated_section_contents: howto manager. (line 3232) +* bfd_generic_gc_sections: howto manager. (line 3207) +* bfd_generic_get_relocated_section_contents: howto manager. (line 3237) * bfd_generic_is_group_section: section prototypes. (line 304) -* bfd_generic_lookup_section_flags: howto manager. (line 3212) -* bfd_generic_merge_sections: howto manager. (line 3222) -* bfd_generic_relax_section: howto manager. (line 3189) +* bfd_generic_lookup_section_flags: howto manager. (line 3217) +* bfd_generic_merge_sections: howto manager. (line 3227) +* bfd_generic_relax_section: howto manager. (line 3194) * bfd_get_alt_debug_link_info: Opening and Closing. (line 299) -* bfd_get_arch: Architectures. (line 587) -* bfd_get_arch_info: Architectures. (line 639) +* bfd_get_arch: Architectures. (line 603) +* bfd_get_arch_info: Architectures. (line 655) * bfd_get_arch_size: Miscellaneous. (line 61) * bfd_get_assert_handler: Error reporting. (line 152) * bfd_get_compression_header_size: Miscellaneous. (line 389) @@ -11268,12 +11324,12 @@ BFD Index * bfd_get_error_handler: Error reporting. (line 119) * bfd_get_gp_size: Miscellaneous. (line 104) * bfd_get_linker_section: section prototypes. (line 37) -* bfd_get_mach: Architectures. (line 595) +* bfd_get_mach: Architectures. (line 611) * bfd_get_mtime: Miscellaneous. (line 462) * bfd_get_next_mapent: Archives. (line 57) * bfd_get_next_section_by_name: section prototypes. (line 25) * bfd_get_next_section_id: section prototypes. (line 154) -* bfd_get_reloc_code_name: howto manager. (line 3180) +* bfd_get_reloc_code_name: howto manager. (line 3185) * bfd_get_reloc_size: typedef arelent. (line 331) * bfd_get_reloc_upper_bound: Miscellaneous. (line 8) * bfd_get_section_by_name: section prototypes. (line 16) @@ -11284,7 +11340,7 @@ BFD Index * bfd_get_size <1>: Internal. (line 24) * bfd_get_symtab_upper_bound: symbol handling functions. (line 5) -* bfd_get_target_info: bfd_target. (line 490) +* bfd_get_target_info: bfd_target. (line 494) * bfd_get_unique_section_name: section prototypes. (line 65) * bfd_hash_allocate: Creating and Freeing a Hash Table. (line 17) @@ -11315,10 +11371,13 @@ BFD Index (line 39) * bfd_is_undefined_symclass: symbol handling functions. (line 125) +* bfd_iterate_over_targets: bfd_target. (line 529) +* bfd_link_check_relocs: Writing the symbol table. + (line 105) * bfd_link_split_section: Writing the symbol table. (line 43) * bfd_log2: Internal. (line 166) -* bfd_lookup_arch: Architectures. (line 647) +* bfd_lookup_arch: Architectures. (line 663) * bfd_make_debug_symbol: symbol handling functions. (line 106) * bfd_make_empty_symbol: symbol handling functions. @@ -11336,7 +11395,7 @@ BFD Index * bfd_map_over_sections: section prototypes. (line 186) * bfd_merge_private_bfd_data: Miscellaneous. (line 172) * bfd_mmap: Miscellaneous. (line 499) -* bfd_octets_per_byte: Architectures. (line 670) +* bfd_octets_per_byte: Architectures. (line 686) * bfd_openr: Opening and Closing. (line 37) * bfd_openr_iovec: Opening and Closing. @@ -11349,54 +11408,54 @@ BFD Index * bfd_open_file: File Caching. (line 51) * bfd_perform_relocation: typedef arelent. (line 369) * bfd_perror: Error reporting. (line 76) -* bfd_printable_arch_mach: Architectures. (line 658) -* bfd_printable_name: Architectures. (line 518) +* bfd_printable_arch_mach: Architectures. (line 674) +* bfd_printable_name: Architectures. (line 534) * bfd_print_symbol_vandf: symbol handling functions. (line 73) * bfd_put_size: Internal. (line 21) * BFD_RELOC_12_PCREL: howto manager. (line 37) * BFD_RELOC_14: howto manager. (line 30) * BFD_RELOC_16: howto manager. (line 29) -* BFD_RELOC_16C_ABS20: howto manager. (line 2161) -* BFD_RELOC_16C_ABS20_C: howto manager. (line 2162) -* BFD_RELOC_16C_ABS24: howto manager. (line 2163) -* BFD_RELOC_16C_ABS24_C: howto manager. (line 2164) -* BFD_RELOC_16C_DISP04: howto manager. (line 2141) -* BFD_RELOC_16C_DISP04_C: howto manager. (line 2142) -* BFD_RELOC_16C_DISP08: howto manager. (line 2143) -* BFD_RELOC_16C_DISP08_C: howto manager. (line 2144) -* BFD_RELOC_16C_DISP16: howto manager. (line 2145) -* BFD_RELOC_16C_DISP16_C: howto manager. (line 2146) -* BFD_RELOC_16C_DISP24: howto manager. (line 2147) -* BFD_RELOC_16C_DISP24a: howto manager. (line 2149) -* BFD_RELOC_16C_DISP24a_C: howto manager. (line 2150) -* BFD_RELOC_16C_DISP24_C: howto manager. (line 2148) -* BFD_RELOC_16C_IMM04: howto manager. (line 2165) -* BFD_RELOC_16C_IMM04_C: howto manager. (line 2166) -* BFD_RELOC_16C_IMM16: howto manager. (line 2167) -* BFD_RELOC_16C_IMM16_C: howto manager. (line 2168) -* BFD_RELOC_16C_IMM20: howto manager. (line 2169) -* BFD_RELOC_16C_IMM20_C: howto manager. (line 2170) -* BFD_RELOC_16C_IMM24: howto manager. (line 2171) -* BFD_RELOC_16C_IMM24_C: howto manager. (line 2172) -* BFD_RELOC_16C_IMM32: howto manager. (line 2173) -* BFD_RELOC_16C_IMM32_C: howto manager. (line 2174) -* BFD_RELOC_16C_NUM08: howto manager. (line 2135) -* BFD_RELOC_16C_NUM08_C: howto manager. (line 2136) -* BFD_RELOC_16C_NUM16: howto manager. (line 2137) -* BFD_RELOC_16C_NUM16_C: howto manager. (line 2138) -* BFD_RELOC_16C_NUM32: howto manager. (line 2139) -* BFD_RELOC_16C_NUM32_C: howto manager. (line 2140) -* BFD_RELOC_16C_REG04: howto manager. (line 2151) -* BFD_RELOC_16C_REG04a: howto manager. (line 2153) -* BFD_RELOC_16C_REG04a_C: howto manager. (line 2154) -* BFD_RELOC_16C_REG04_C: howto manager. (line 2152) -* BFD_RELOC_16C_REG14: howto manager. (line 2155) -* BFD_RELOC_16C_REG14_C: howto manager. (line 2156) -* BFD_RELOC_16C_REG16: howto manager. (line 2157) -* BFD_RELOC_16C_REG16_C: howto manager. (line 2158) -* BFD_RELOC_16C_REG20: howto manager. (line 2159) -* BFD_RELOC_16C_REG20_C: howto manager. (line 2160) +* BFD_RELOC_16C_ABS20: howto manager. (line 2164) +* BFD_RELOC_16C_ABS20_C: howto manager. (line 2165) +* BFD_RELOC_16C_ABS24: howto manager. (line 2166) +* BFD_RELOC_16C_ABS24_C: howto manager. (line 2167) +* BFD_RELOC_16C_DISP04: howto manager. (line 2144) +* BFD_RELOC_16C_DISP04_C: howto manager. (line 2145) +* BFD_RELOC_16C_DISP08: howto manager. (line 2146) +* BFD_RELOC_16C_DISP08_C: howto manager. (line 2147) +* BFD_RELOC_16C_DISP16: howto manager. (line 2148) +* BFD_RELOC_16C_DISP16_C: howto manager. (line 2149) +* BFD_RELOC_16C_DISP24: howto manager. (line 2150) +* BFD_RELOC_16C_DISP24a: howto manager. (line 2152) +* BFD_RELOC_16C_DISP24a_C: howto manager. (line 2153) +* BFD_RELOC_16C_DISP24_C: howto manager. (line 2151) +* BFD_RELOC_16C_IMM04: howto manager. (line 2168) +* BFD_RELOC_16C_IMM04_C: howto manager. (line 2169) +* BFD_RELOC_16C_IMM16: howto manager. (line 2170) +* BFD_RELOC_16C_IMM16_C: howto manager. (line 2171) +* BFD_RELOC_16C_IMM20: howto manager. (line 2172) +* BFD_RELOC_16C_IMM20_C: howto manager. (line 2173) +* BFD_RELOC_16C_IMM24: howto manager. (line 2174) +* BFD_RELOC_16C_IMM24_C: howto manager. (line 2175) +* BFD_RELOC_16C_IMM32: howto manager. (line 2176) +* BFD_RELOC_16C_IMM32_C: howto manager. (line 2177) +* BFD_RELOC_16C_NUM08: howto manager. (line 2138) +* BFD_RELOC_16C_NUM08_C: howto manager. (line 2139) +* BFD_RELOC_16C_NUM16: howto manager. (line 2140) +* BFD_RELOC_16C_NUM16_C: howto manager. (line 2141) +* BFD_RELOC_16C_NUM32: howto manager. (line 2142) +* BFD_RELOC_16C_NUM32_C: howto manager. (line 2143) +* BFD_RELOC_16C_REG04: howto manager. (line 2154) +* BFD_RELOC_16C_REG04a: howto manager. (line 2156) +* BFD_RELOC_16C_REG04a_C: howto manager. (line 2157) +* BFD_RELOC_16C_REG04_C: howto manager. (line 2155) +* BFD_RELOC_16C_REG14: howto manager. (line 2158) +* BFD_RELOC_16C_REG14_C: howto manager. (line 2159) +* BFD_RELOC_16C_REG16: howto manager. (line 2160) +* BFD_RELOC_16C_REG16_C: howto manager. (line 2161) +* BFD_RELOC_16C_REG20: howto manager. (line 2162) +* BFD_RELOC_16C_REG20_C: howto manager. (line 2163) * BFD_RELOC_16_BASEREL: howto manager. (line 92) * BFD_RELOC_16_GOTOFF: howto manager. (line 51) * BFD_RELOC_16_GOT_PCREL: howto manager. (line 48) @@ -11418,86 +11477,86 @@ BFD Index * BFD_RELOC_32_PLTOFF: howto manager. (line 62) * BFD_RELOC_32_PLT_PCREL: howto manager. (line 57) * BFD_RELOC_32_SECREL: howto manager. (line 45) -* BFD_RELOC_386_COPY: howto manager. (line 520) -* BFD_RELOC_386_GLOB_DAT: howto manager. (line 521) -* BFD_RELOC_386_GOT32: howto manager. (line 518) -* BFD_RELOC_386_GOT32X: howto manager. (line 542) -* BFD_RELOC_386_GOTOFF: howto manager. (line 524) -* BFD_RELOC_386_GOTPC: howto manager. (line 525) -* BFD_RELOC_386_IRELATIVE: howto manager. (line 541) -* BFD_RELOC_386_JUMP_SLOT: howto manager. (line 522) -* BFD_RELOC_386_PLT32: howto manager. (line 519) -* BFD_RELOC_386_RELATIVE: howto manager. (line 523) -* BFD_RELOC_386_TLS_DESC: howto manager. (line 540) -* BFD_RELOC_386_TLS_DESC_CALL: howto manager. (line 539) -* BFD_RELOC_386_TLS_DTPMOD32: howto manager. (line 535) -* BFD_RELOC_386_TLS_DTPOFF32: howto manager. (line 536) -* BFD_RELOC_386_TLS_GD: howto manager. (line 530) -* BFD_RELOC_386_TLS_GOTDESC: howto manager. (line 538) -* BFD_RELOC_386_TLS_GOTIE: howto manager. (line 528) -* BFD_RELOC_386_TLS_IE: howto manager. (line 527) -* BFD_RELOC_386_TLS_IE_32: howto manager. (line 533) -* BFD_RELOC_386_TLS_LDM: howto manager. (line 531) -* BFD_RELOC_386_TLS_LDO_32: howto manager. (line 532) -* BFD_RELOC_386_TLS_LE: howto manager. (line 529) -* BFD_RELOC_386_TLS_LE_32: howto manager. (line 534) -* BFD_RELOC_386_TLS_TPOFF: howto manager. (line 526) -* BFD_RELOC_386_TLS_TPOFF32: howto manager. (line 537) -* BFD_RELOC_390_12: howto manager. (line 1825) -* BFD_RELOC_390_20: howto manager. (line 1906) -* BFD_RELOC_390_COPY: howto manager. (line 1831) -* BFD_RELOC_390_GLOB_DAT: howto manager. (line 1833) -* BFD_RELOC_390_GOT12: howto manager. (line 1827) -* BFD_RELOC_390_GOT16: howto manager. (line 1841) -* BFD_RELOC_390_GOT20: howto manager. (line 1907) -* BFD_RELOC_390_GOT64: howto manager. (line 1861) -* BFD_RELOC_390_GOTENT: howto manager. (line 1865) -* BFD_RELOC_390_GOTOFF64: howto manager. (line 1867) -* BFD_RELOC_390_GOTPC: howto manager. (line 1839) -* BFD_RELOC_390_GOTPCDBL: howto manager. (line 1859) -* BFD_RELOC_390_GOTPLT12: howto manager. (line 1869) -* BFD_RELOC_390_GOTPLT16: howto manager. (line 1871) -* BFD_RELOC_390_GOTPLT20: howto manager. (line 1908) -* BFD_RELOC_390_GOTPLT32: howto manager. (line 1873) -* BFD_RELOC_390_GOTPLT64: howto manager. (line 1875) -* BFD_RELOC_390_GOTPLTENT: howto manager. (line 1877) -* BFD_RELOC_390_IRELATIVE: howto manager. (line 1911) -* BFD_RELOC_390_JMP_SLOT: howto manager. (line 1835) -* BFD_RELOC_390_PC12DBL: howto manager. (line 1843) -* BFD_RELOC_390_PC16DBL: howto manager. (line 1847) -* BFD_RELOC_390_PC24DBL: howto manager. (line 1851) -* BFD_RELOC_390_PC32DBL: howto manager. (line 1855) -* BFD_RELOC_390_PLT12DBL: howto manager. (line 1845) -* BFD_RELOC_390_PLT16DBL: howto manager. (line 1849) -* BFD_RELOC_390_PLT24DBL: howto manager. (line 1853) -* BFD_RELOC_390_PLT32: howto manager. (line 1829) -* BFD_RELOC_390_PLT32DBL: howto manager. (line 1857) -* BFD_RELOC_390_PLT64: howto manager. (line 1863) -* BFD_RELOC_390_PLTOFF16: howto manager. (line 1879) -* BFD_RELOC_390_PLTOFF32: howto manager. (line 1881) -* BFD_RELOC_390_PLTOFF64: howto manager. (line 1883) -* BFD_RELOC_390_RELATIVE: howto manager. (line 1837) -* BFD_RELOC_390_TLS_DTPMOD: howto manager. (line 1902) -* BFD_RELOC_390_TLS_DTPOFF: howto manager. (line 1903) -* BFD_RELOC_390_TLS_GD32: howto manager. (line 1888) -* BFD_RELOC_390_TLS_GD64: howto manager. (line 1889) -* BFD_RELOC_390_TLS_GDCALL: howto manager. (line 1886) -* BFD_RELOC_390_TLS_GOTIE12: howto manager. (line 1890) -* BFD_RELOC_390_TLS_GOTIE20: howto manager. (line 1909) -* BFD_RELOC_390_TLS_GOTIE32: howto manager. (line 1891) -* BFD_RELOC_390_TLS_GOTIE64: howto manager. (line 1892) -* BFD_RELOC_390_TLS_IE32: howto manager. (line 1895) -* BFD_RELOC_390_TLS_IE64: howto manager. (line 1896) -* BFD_RELOC_390_TLS_IEENT: howto manager. (line 1897) -* BFD_RELOC_390_TLS_LDCALL: howto manager. (line 1887) -* BFD_RELOC_390_TLS_LDM32: howto manager. (line 1893) -* BFD_RELOC_390_TLS_LDM64: howto manager. (line 1894) -* BFD_RELOC_390_TLS_LDO32: howto manager. (line 1900) -* BFD_RELOC_390_TLS_LDO64: howto manager. (line 1901) -* BFD_RELOC_390_TLS_LE32: howto manager. (line 1898) -* BFD_RELOC_390_TLS_LE64: howto manager. (line 1899) -* BFD_RELOC_390_TLS_LOAD: howto manager. (line 1885) -* BFD_RELOC_390_TLS_TPOFF: howto manager. (line 1904) +* BFD_RELOC_386_COPY: howto manager. (line 522) +* BFD_RELOC_386_GLOB_DAT: howto manager. (line 523) +* BFD_RELOC_386_GOT32: howto manager. (line 520) +* BFD_RELOC_386_GOT32X: howto manager. (line 544) +* BFD_RELOC_386_GOTOFF: howto manager. (line 526) +* BFD_RELOC_386_GOTPC: howto manager. (line 527) +* BFD_RELOC_386_IRELATIVE: howto manager. (line 543) +* BFD_RELOC_386_JUMP_SLOT: howto manager. (line 524) +* BFD_RELOC_386_PLT32: howto manager. (line 521) +* BFD_RELOC_386_RELATIVE: howto manager. (line 525) +* BFD_RELOC_386_TLS_DESC: howto manager. (line 542) +* BFD_RELOC_386_TLS_DESC_CALL: howto manager. (line 541) +* BFD_RELOC_386_TLS_DTPMOD32: howto manager. (line 537) +* BFD_RELOC_386_TLS_DTPOFF32: howto manager. (line 538) +* BFD_RELOC_386_TLS_GD: howto manager. (line 532) +* BFD_RELOC_386_TLS_GOTDESC: howto manager. (line 540) +* BFD_RELOC_386_TLS_GOTIE: howto manager. (line 530) +* BFD_RELOC_386_TLS_IE: howto manager. (line 529) +* BFD_RELOC_386_TLS_IE_32: howto manager. (line 535) +* BFD_RELOC_386_TLS_LDM: howto manager. (line 533) +* BFD_RELOC_386_TLS_LDO_32: howto manager. (line 534) +* BFD_RELOC_386_TLS_LE: howto manager. (line 531) +* BFD_RELOC_386_TLS_LE_32: howto manager. (line 536) +* BFD_RELOC_386_TLS_TPOFF: howto manager. (line 528) +* BFD_RELOC_386_TLS_TPOFF32: howto manager. (line 539) +* BFD_RELOC_390_12: howto manager. (line 1828) +* BFD_RELOC_390_20: howto manager. (line 1909) +* BFD_RELOC_390_COPY: howto manager. (line 1834) +* BFD_RELOC_390_GLOB_DAT: howto manager. (line 1836) +* BFD_RELOC_390_GOT12: howto manager. (line 1830) +* BFD_RELOC_390_GOT16: howto manager. (line 1844) +* BFD_RELOC_390_GOT20: howto manager. (line 1910) +* BFD_RELOC_390_GOT64: howto manager. (line 1864) +* BFD_RELOC_390_GOTENT: howto manager. (line 1868) +* BFD_RELOC_390_GOTOFF64: howto manager. (line 1870) +* BFD_RELOC_390_GOTPC: howto manager. (line 1842) +* BFD_RELOC_390_GOTPCDBL: howto manager. (line 1862) +* BFD_RELOC_390_GOTPLT12: howto manager. (line 1872) +* BFD_RELOC_390_GOTPLT16: howto manager. (line 1874) +* BFD_RELOC_390_GOTPLT20: howto manager. (line 1911) +* BFD_RELOC_390_GOTPLT32: howto manager. (line 1876) +* BFD_RELOC_390_GOTPLT64: howto manager. (line 1878) +* BFD_RELOC_390_GOTPLTENT: howto manager. (line 1880) +* BFD_RELOC_390_IRELATIVE: howto manager. (line 1914) +* BFD_RELOC_390_JMP_SLOT: howto manager. (line 1838) +* BFD_RELOC_390_PC12DBL: howto manager. (line 1846) +* BFD_RELOC_390_PC16DBL: howto manager. (line 1850) +* BFD_RELOC_390_PC24DBL: howto manager. (line 1854) +* BFD_RELOC_390_PC32DBL: howto manager. (line 1858) +* BFD_RELOC_390_PLT12DBL: howto manager. (line 1848) +* BFD_RELOC_390_PLT16DBL: howto manager. (line 1852) +* BFD_RELOC_390_PLT24DBL: howto manager. (line 1856) +* BFD_RELOC_390_PLT32: howto manager. (line 1832) +* BFD_RELOC_390_PLT32DBL: howto manager. (line 1860) +* BFD_RELOC_390_PLT64: howto manager. (line 1866) +* BFD_RELOC_390_PLTOFF16: howto manager. (line 1882) +* BFD_RELOC_390_PLTOFF32: howto manager. (line 1884) +* BFD_RELOC_390_PLTOFF64: howto manager. (line 1886) +* BFD_RELOC_390_RELATIVE: howto manager. (line 1840) +* BFD_RELOC_390_TLS_DTPMOD: howto manager. (line 1905) +* BFD_RELOC_390_TLS_DTPOFF: howto manager. (line 1906) +* BFD_RELOC_390_TLS_GD32: howto manager. (line 1891) +* BFD_RELOC_390_TLS_GD64: howto manager. (line 1892) +* BFD_RELOC_390_TLS_GDCALL: howto manager. (line 1889) +* BFD_RELOC_390_TLS_GOTIE12: howto manager. (line 1893) +* BFD_RELOC_390_TLS_GOTIE20: howto manager. (line 1912) +* BFD_RELOC_390_TLS_GOTIE32: howto manager. (line 1894) +* BFD_RELOC_390_TLS_GOTIE64: howto manager. (line 1895) +* BFD_RELOC_390_TLS_IE32: howto manager. (line 1898) +* BFD_RELOC_390_TLS_IE64: howto manager. (line 1899) +* BFD_RELOC_390_TLS_IEENT: howto manager. (line 1900) +* BFD_RELOC_390_TLS_LDCALL: howto manager. (line 1890) +* BFD_RELOC_390_TLS_LDM32: howto manager. (line 1896) +* BFD_RELOC_390_TLS_LDM64: howto manager. (line 1897) +* BFD_RELOC_390_TLS_LDO32: howto manager. (line 1903) +* BFD_RELOC_390_TLS_LDO64: howto manager. (line 1904) +* BFD_RELOC_390_TLS_LE32: howto manager. (line 1901) +* BFD_RELOC_390_TLS_LE64: howto manager. (line 1902) +* BFD_RELOC_390_TLS_LOAD: howto manager. (line 1888) +* BFD_RELOC_390_TLS_TPOFF: howto manager. (line 1907) * BFD_RELOC_64: howto manager. (line 25) * BFD_RELOC_64_PCREL: howto manager. (line 33) * BFD_RELOC_64_PLTOFF: howto manager. (line 61) @@ -11521,38 +11580,38 @@ BFD Index * BFD_RELOC_68K_TLS_LE32: howto manager. (line 87) * BFD_RELOC_68K_TLS_LE8: howto manager. (line 89) * BFD_RELOC_8: howto manager. (line 31) -* BFD_RELOC_860_COPY: howto manager. (line 2276) -* BFD_RELOC_860_GLOB_DAT: howto manager. (line 2277) -* BFD_RELOC_860_HAGOT: howto manager. (line 2302) -* BFD_RELOC_860_HAGOTOFF: howto manager. (line 2303) -* BFD_RELOC_860_HAPC: howto manager. (line 2304) -* BFD_RELOC_860_HIGH: howto manager. (line 2305) -* BFD_RELOC_860_HIGHADJ: howto manager. (line 2301) -* BFD_RELOC_860_HIGOT: howto manager. (line 2306) -* BFD_RELOC_860_HIGOTOFF: howto manager. (line 2307) -* BFD_RELOC_860_JUMP_SLOT: howto manager. (line 2278) -* BFD_RELOC_860_LOGOT0: howto manager. (line 2290) -* BFD_RELOC_860_LOGOT1: howto manager. (line 2292) -* BFD_RELOC_860_LOGOTOFF0: howto manager. (line 2294) -* BFD_RELOC_860_LOGOTOFF1: howto manager. (line 2296) -* BFD_RELOC_860_LOGOTOFF2: howto manager. (line 2298) -* BFD_RELOC_860_LOGOTOFF3: howto manager. (line 2299) -* BFD_RELOC_860_LOPC: howto manager. (line 2300) -* BFD_RELOC_860_LOW0: howto manager. (line 2283) -* BFD_RELOC_860_LOW1: howto manager. (line 2285) -* BFD_RELOC_860_LOW2: howto manager. (line 2287) -* BFD_RELOC_860_LOW3: howto manager. (line 2289) -* BFD_RELOC_860_PC16: howto manager. (line 2282) -* BFD_RELOC_860_PC26: howto manager. (line 2280) -* BFD_RELOC_860_PLT26: howto manager. (line 2281) -* BFD_RELOC_860_RELATIVE: howto manager. (line 2279) -* BFD_RELOC_860_SPGOT0: howto manager. (line 2291) -* BFD_RELOC_860_SPGOT1: howto manager. (line 2293) -* BFD_RELOC_860_SPGOTOFF0: howto manager. (line 2295) -* BFD_RELOC_860_SPGOTOFF1: howto manager. (line 2297) -* BFD_RELOC_860_SPLIT0: howto manager. (line 2284) -* BFD_RELOC_860_SPLIT1: howto manager. (line 2286) -* BFD_RELOC_860_SPLIT2: howto manager. (line 2288) +* BFD_RELOC_860_COPY: howto manager. (line 2279) +* BFD_RELOC_860_GLOB_DAT: howto manager. (line 2280) +* BFD_RELOC_860_HAGOT: howto manager. (line 2305) +* BFD_RELOC_860_HAGOTOFF: howto manager. (line 2306) +* BFD_RELOC_860_HAPC: howto manager. (line 2307) +* BFD_RELOC_860_HIGH: howto manager. (line 2308) +* BFD_RELOC_860_HIGHADJ: howto manager. (line 2304) +* BFD_RELOC_860_HIGOT: howto manager. (line 2309) +* BFD_RELOC_860_HIGOTOFF: howto manager. (line 2310) +* BFD_RELOC_860_JUMP_SLOT: howto manager. (line 2281) +* BFD_RELOC_860_LOGOT0: howto manager. (line 2293) +* BFD_RELOC_860_LOGOT1: howto manager. (line 2295) +* BFD_RELOC_860_LOGOTOFF0: howto manager. (line 2297) +* BFD_RELOC_860_LOGOTOFF1: howto manager. (line 2299) +* BFD_RELOC_860_LOGOTOFF2: howto manager. (line 2301) +* BFD_RELOC_860_LOGOTOFF3: howto manager. (line 2302) +* BFD_RELOC_860_LOPC: howto manager. (line 2303) +* BFD_RELOC_860_LOW0: howto manager. (line 2286) +* BFD_RELOC_860_LOW1: howto manager. (line 2288) +* BFD_RELOC_860_LOW2: howto manager. (line 2290) +* BFD_RELOC_860_LOW3: howto manager. (line 2292) +* BFD_RELOC_860_PC16: howto manager. (line 2285) +* BFD_RELOC_860_PC26: howto manager. (line 2283) +* BFD_RELOC_860_PLT26: howto manager. (line 2284) +* BFD_RELOC_860_RELATIVE: howto manager. (line 2282) +* BFD_RELOC_860_SPGOT0: howto manager. (line 2294) +* BFD_RELOC_860_SPGOT1: howto manager. (line 2296) +* BFD_RELOC_860_SPGOTOFF0: howto manager. (line 2298) +* BFD_RELOC_860_SPGOTOFF1: howto manager. (line 2300) +* BFD_RELOC_860_SPLIT0: howto manager. (line 2287) +* BFD_RELOC_860_SPLIT1: howto manager. (line 2289) +* BFD_RELOC_860_SPLIT2: howto manager. (line 2291) * BFD_RELOC_8_BASEREL: howto manager. (line 96) * BFD_RELOC_8_FFnn: howto manager. (line 99) * BFD_RELOC_8_GOTOFF: howto manager. (line 55) @@ -11560,129 +11619,130 @@ BFD Index * BFD_RELOC_8_PCREL: howto manager. (line 38) * BFD_RELOC_8_PLTOFF: howto manager. (line 67) * BFD_RELOC_8_PLT_PCREL: howto manager. (line 60) -* BFD_RELOC_AARCH64_16: howto manager. (line 2651) -* BFD_RELOC_AARCH64_16_PCREL: howto manager. (line 2657) -* BFD_RELOC_AARCH64_32: howto manager. (line 2650) -* BFD_RELOC_AARCH64_32_PCREL: howto manager. (line 2656) -* BFD_RELOC_AARCH64_64: howto manager. (line 2649) -* BFD_RELOC_AARCH64_64_PCREL: howto manager. (line 2655) -* BFD_RELOC_AARCH64_ADD_LO12: howto manager. (line 2707) -* BFD_RELOC_AARCH64_ADR_GOT_PAGE: howto manager. (line 2753) -* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: howto manager. (line 2703) -* BFD_RELOC_AARCH64_ADR_HI21_PCREL: howto manager. (line 2700) -* BFD_RELOC_AARCH64_ADR_LO21_PCREL: howto manager. (line 2697) -* BFD_RELOC_AARCH64_BRANCH19: howto manager. (line 2719) -* BFD_RELOC_AARCH64_CALL26: howto manager. (line 2727) -* BFD_RELOC_AARCH64_COPY: howto manager. (line 2896) -* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP: howto manager. (line 2920) -* BFD_RELOC_AARCH64_GLOB_DAT: howto manager. (line 2898) -* BFD_RELOC_AARCH64_GOT_LD_PREL19: howto manager. (line 2747) -* BFD_RELOC_AARCH64_IRELATIVE: howto manager. (line 2912) -* BFD_RELOC_AARCH64_JUMP26: howto manager. (line 2723) -* BFD_RELOC_AARCH64_JUMP_SLOT: howto manager. (line 2900) -* BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14: howto manager. (line 2774) -* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC: howto manager. (line 2761) -* BFD_RELOC_AARCH64_LD64_GOTOFF_LO15: howto manager. (line 2771) -* BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15: howto manager. (line 2777) -* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC: howto manager. (line 2757) -* BFD_RELOC_AARCH64_LDST128_LO12: howto manager. (line 2743) -* BFD_RELOC_AARCH64_LDST16_LO12: howto manager. (line 2731) -* BFD_RELOC_AARCH64_LDST32_LO12: howto manager. (line 2735) -* BFD_RELOC_AARCH64_LDST64_LO12: howto manager. (line 2739) -* BFD_RELOC_AARCH64_LDST8_LO12: howto manager. (line 2711) -* BFD_RELOC_AARCH64_LDST_LO12: howto manager. (line 2923) -* BFD_RELOC_AARCH64_LD_GOT_LO12_NC: howto manager. (line 2934) -* BFD_RELOC_AARCH64_LD_LO19_PCREL: howto manager. (line 2693) -* BFD_RELOC_AARCH64_MOVW_G0: howto manager. (line 2660) -* BFD_RELOC_AARCH64_MOVW_G0_NC: howto manager. (line 2663) -* BFD_RELOC_AARCH64_MOVW_G0_S: howto manager. (line 2681) -* BFD_RELOC_AARCH64_MOVW_G1: howto manager. (line 2666) -* BFD_RELOC_AARCH64_MOVW_G1_NC: howto manager. (line 2669) -* BFD_RELOC_AARCH64_MOVW_G1_S: howto manager. (line 2685) -* BFD_RELOC_AARCH64_MOVW_G2: howto manager. (line 2672) -* BFD_RELOC_AARCH64_MOVW_G2_NC: howto manager. (line 2675) -* BFD_RELOC_AARCH64_MOVW_G2_S: howto manager. (line 2689) -* BFD_RELOC_AARCH64_MOVW_G3: howto manager. (line 2678) -* BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC: howto manager. (line 2765) -* BFD_RELOC_AARCH64_MOVW_GOTOFF_G1: howto manager. (line 2768) -* BFD_RELOC_AARCH64_NONE: howto manager. (line 2647) -* BFD_RELOC_AARCH64_RELATIVE: howto manager. (line 2902) -* BFD_RELOC_AARCH64_RELOC_END: howto manager. (line 2914) -* BFD_RELOC_AARCH64_RELOC_START: howto manager. (line 2642) -* BFD_RELOC_AARCH64_TLSDESC: howto manager. (line 2910) -* BFD_RELOC_AARCH64_TLSDESC_ADD: howto manager. (line 2892) -* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12_NC: howto manager. (line 2884) -* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21: howto manager. (line 2878) -* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21: howto manager. (line 2876) -* BFD_RELOC_AARCH64_TLSDESC_CALL: howto manager. (line 2894) -* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager. (line 2882) -* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC: howto manager. (line 2880) -* BFD_RELOC_AARCH64_TLSDESC_LDR: howto manager. (line 2890) -* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC: howto manager. (line 2940) -* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19: howto manager. (line 2874) -* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC: howto manager. (line 2888) -* BFD_RELOC_AARCH64_TLSDESC_OFF_G1: howto manager. (line 2886) -* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC: howto manager. (line 2787) -* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21: howto manager. (line 2780) -* BFD_RELOC_AARCH64_TLSGD_ADR_PREL21: howto manager. (line 2785) -* BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: howto manager. (line 2791) -* BFD_RELOC_AARCH64_TLSGD_MOVW_G1: howto manager. (line 2793) +* BFD_RELOC_AARCH64_16: howto manager. (line 2656) +* BFD_RELOC_AARCH64_16_PCREL: howto manager. (line 2662) +* BFD_RELOC_AARCH64_32: howto manager. (line 2655) +* BFD_RELOC_AARCH64_32_PCREL: howto manager. (line 2661) +* BFD_RELOC_AARCH64_64: howto manager. (line 2654) +* BFD_RELOC_AARCH64_64_PCREL: howto manager. (line 2660) +* BFD_RELOC_AARCH64_ADD_LO12: howto manager. (line 2712) +* BFD_RELOC_AARCH64_ADR_GOT_PAGE: howto manager. (line 2758) +* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: howto manager. (line 2708) +* BFD_RELOC_AARCH64_ADR_HI21_PCREL: howto manager. (line 2705) +* BFD_RELOC_AARCH64_ADR_LO21_PCREL: howto manager. (line 2702) +* BFD_RELOC_AARCH64_BRANCH19: howto manager. (line 2724) +* BFD_RELOC_AARCH64_CALL26: howto manager. (line 2732) +* BFD_RELOC_AARCH64_COPY: howto manager. (line 2901) +* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP: howto manager. (line 2925) +* BFD_RELOC_AARCH64_GLOB_DAT: howto manager. (line 2903) +* BFD_RELOC_AARCH64_GOT_LD_PREL19: howto manager. (line 2752) +* BFD_RELOC_AARCH64_IRELATIVE: howto manager. (line 2917) +* BFD_RELOC_AARCH64_JUMP26: howto manager. (line 2728) +* BFD_RELOC_AARCH64_JUMP_SLOT: howto manager. (line 2905) +* BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14: howto manager. (line 2779) +* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC: howto manager. (line 2766) +* BFD_RELOC_AARCH64_LD64_GOTOFF_LO15: howto manager. (line 2776) +* BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15: howto manager. (line 2782) +* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC: howto manager. (line 2762) +* BFD_RELOC_AARCH64_LDST128_LO12: howto manager. (line 2748) +* BFD_RELOC_AARCH64_LDST16_LO12: howto manager. (line 2736) +* BFD_RELOC_AARCH64_LDST32_LO12: howto manager. (line 2740) +* BFD_RELOC_AARCH64_LDST64_LO12: howto manager. (line 2744) +* BFD_RELOC_AARCH64_LDST8_LO12: howto manager. (line 2716) +* BFD_RELOC_AARCH64_LDST_LO12: howto manager. (line 2928) +* BFD_RELOC_AARCH64_LD_GOT_LO12_NC: howto manager. (line 2939) +* BFD_RELOC_AARCH64_LD_LO19_PCREL: howto manager. (line 2698) +* BFD_RELOC_AARCH64_MOVW_G0: howto manager. (line 2665) +* BFD_RELOC_AARCH64_MOVW_G0_NC: howto manager. (line 2668) +* BFD_RELOC_AARCH64_MOVW_G0_S: howto manager. (line 2686) +* BFD_RELOC_AARCH64_MOVW_G1: howto manager. (line 2671) +* BFD_RELOC_AARCH64_MOVW_G1_NC: howto manager. (line 2674) +* BFD_RELOC_AARCH64_MOVW_G1_S: howto manager. (line 2690) +* BFD_RELOC_AARCH64_MOVW_G2: howto manager. (line 2677) +* BFD_RELOC_AARCH64_MOVW_G2_NC: howto manager. (line 2680) +* BFD_RELOC_AARCH64_MOVW_G2_S: howto manager. (line 2694) +* BFD_RELOC_AARCH64_MOVW_G3: howto manager. (line 2683) +* BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC: howto manager. (line 2770) +* BFD_RELOC_AARCH64_MOVW_GOTOFF_G1: howto manager. (line 2773) +* BFD_RELOC_AARCH64_NONE: howto manager. (line 2652) +* BFD_RELOC_AARCH64_NULL: howto manager. (line 2650) +* BFD_RELOC_AARCH64_RELATIVE: howto manager. (line 2907) +* BFD_RELOC_AARCH64_RELOC_END: howto manager. (line 2919) +* BFD_RELOC_AARCH64_RELOC_START: howto manager. (line 2645) +* BFD_RELOC_AARCH64_TLSDESC: howto manager. (line 2915) +* BFD_RELOC_AARCH64_TLSDESC_ADD: howto manager. (line 2897) +* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12_NC: howto manager. (line 2889) +* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21: howto manager. (line 2883) +* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21: howto manager. (line 2881) +* BFD_RELOC_AARCH64_TLSDESC_CALL: howto manager. (line 2899) +* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager. (line 2887) +* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC: howto manager. (line 2885) +* BFD_RELOC_AARCH64_TLSDESC_LDR: howto manager. (line 2895) +* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC: howto manager. (line 2945) +* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19: howto manager. (line 2879) +* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC: howto manager. (line 2893) +* BFD_RELOC_AARCH64_TLSDESC_OFF_G1: howto manager. (line 2891) +* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC: howto manager. (line 2792) +* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21: howto manager. (line 2785) +* BFD_RELOC_AARCH64_TLSGD_ADR_PREL21: howto manager. (line 2790) +* BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: howto manager. (line 2796) +* BFD_RELOC_AARCH64_TLSGD_MOVW_G1: howto manager. (line 2798) * BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: howto manager. - (line 2795) + (line 2800) * BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: howto manager. - (line 2799) + (line 2804) * BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: howto manager. - (line 2797) + (line 2802) * BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC: howto manager. - (line 2937) -* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2801) + (line 2942) +* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2806) * BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: howto manager. - (line 2803) -* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager. (line 2805) -* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: howto manager. (line 2807) -* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: howto manager. (line 2809) -* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: howto manager. (line 2811) -* BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: howto manager. (line 2814) -* BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21: howto manager. (line 2818) -* BFD_RELOC_AARCH64_TLSLD_ADR_PREL21: howto manager. (line 2821) -* BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12: howto manager. (line 2824) + (line 2808) +* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager. (line 2810) +* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: howto manager. (line 2812) +* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: howto manager. (line 2814) +* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: howto manager. (line 2816) +* BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: howto manager. (line 2819) +* BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21: howto manager. (line 2823) +* BFD_RELOC_AARCH64_TLSLD_ADR_PREL21: howto manager. (line 2826) +* BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12: howto manager. (line 2829) * BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC: howto manager. - (line 2827) -* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 2830) + (line 2832) +* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 2835) * BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC: howto manager. - (line 2833) -* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 2836) + (line 2838) +* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 2841) * BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC: howto manager. - (line 2839) -* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager. (line 2842) + (line 2844) +* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager. (line 2847) * BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC: howto manager. - (line 2845) -* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager. (line 2927) + (line 2850) +* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager. (line 2932) * BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC: howto manager. - (line 2931) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: howto manager. (line 2848) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: howto manager. (line 2850) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: howto manager. (line 2852) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: howto manager. (line 2854) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2: howto manager. (line 2856) -* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager. (line 2868) -* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager. (line 2870) -* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager. (line 2872) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager. (line 2864) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager. (line 2866) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager. (line 2860) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager. (line 2862) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager. (line 2858) -* BFD_RELOC_AARCH64_TLS_DTPMOD: howto manager. (line 2904) -* BFD_RELOC_AARCH64_TLS_DTPREL: howto manager. (line 2906) -* BFD_RELOC_AARCH64_TLS_TPREL: howto manager. (line 2908) -* BFD_RELOC_AARCH64_TSTBR14: howto manager. (line 2715) -* BFD_RELOC_AC_SECTFOFF_S9: howto manager. (line 1006) -* BFD_RELOC_AC_SECTFOFF_S9_1: howto manager. (line 1007) -* BFD_RELOC_AC_SECTFOFF_S9_2: howto manager. (line 1008) -* BFD_RELOC_AC_SECTOFF_U8: howto manager. (line 1003) -* BFD_RELOC_AC_SECTOFF_U8_1: howto manager. (line 1004) -* BFD_RELOC_AC_SECTOFF_U8_2: howto manager. (line 1005) + (line 2936) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: howto manager. (line 2853) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: howto manager. (line 2855) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: howto manager. (line 2857) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: howto manager. (line 2859) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2: howto manager. (line 2861) +* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager. (line 2873) +* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager. (line 2875) +* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager. (line 2877) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager. (line 2869) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager. (line 2871) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager. (line 2865) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager. (line 2867) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager. (line 2863) +* BFD_RELOC_AARCH64_TLS_DTPMOD: howto manager. (line 2909) +* BFD_RELOC_AARCH64_TLS_DTPREL: howto manager. (line 2911) +* BFD_RELOC_AARCH64_TLS_TPREL: howto manager. (line 2913) +* BFD_RELOC_AARCH64_TSTBR14: howto manager. (line 2720) +* BFD_RELOC_AC_SECTFOFF_S9: howto manager. (line 1008) +* BFD_RELOC_AC_SECTFOFF_S9_1: howto manager. (line 1009) +* BFD_RELOC_AC_SECTFOFF_S9_2: howto manager. (line 1010) +* BFD_RELOC_AC_SECTOFF_U8: howto manager. (line 1005) +* BFD_RELOC_AC_SECTOFF_U8_1: howto manager. (line 1006) +* BFD_RELOC_AC_SECTOFF_U8_2: howto manager. (line 1007) * BFD_RELOC_ALPHA_BOH: howto manager. (line 292) * BFD_RELOC_ALPHA_BRSGP: howto manager. (line 279) * BFD_RELOC_ALPHA_BSR: howto manager. (line 286) @@ -11712,428 +11772,429 @@ BFD Index * BFD_RELOC_ALPHA_TPREL64: howto manager. (line 304) * BFD_RELOC_ALPHA_TPREL_HI16: howto manager. (line 305) * BFD_RELOC_ALPHA_TPREL_LO16: howto manager. (line 306) -* BFD_RELOC_ARC_16: howto manager. (line 975) -* BFD_RELOC_ARC_24: howto manager. (line 976) -* BFD_RELOC_ARC_32: howto manager. (line 977) -* BFD_RELOC_ARC_32_ME: howto manager. (line 997) -* BFD_RELOC_ARC_32_ME_S: howto manager. (line 998) -* BFD_RELOC_ARC_32_PCREL: howto manager. (line 1014) -* BFD_RELOC_ARC_8: howto manager. (line 974) -* BFD_RELOC_ARC_COPY: howto manager. (line 1019) -* BFD_RELOC_ARC_GLOB_DAT: howto manager. (line 1020) -* BFD_RELOC_ARC_GOT32: howto manager. (line 1016) -* BFD_RELOC_ARC_GOTOFF: howto manager. (line 1023) -* BFD_RELOC_ARC_GOTPC: howto manager. (line 1024) -* BFD_RELOC_ARC_GOTPC32: howto manager. (line 1017) -* BFD_RELOC_ARC_JMP_SLOT: howto manager. (line 1021) -* BFD_RELOC_ARC_N16: howto manager. (line 979) -* BFD_RELOC_ARC_N24: howto manager. (line 980) -* BFD_RELOC_ARC_N32: howto manager. (line 981) -* BFD_RELOC_ARC_N32_ME: howto manager. (line 999) -* BFD_RELOC_ARC_N8: howto manager. (line 978) -* BFD_RELOC_ARC_NONE: howto manager. (line 973) -* BFD_RELOC_ARC_PC32: howto manager. (line 1015) -* BFD_RELOC_ARC_PLT32: howto manager. (line 1018) -* BFD_RELOC_ARC_RELATIVE: howto manager. (line 1022) -* BFD_RELOC_ARC_S13_PCREL: howto manager. (line 995) -* BFD_RELOC_ARC_S21H_PCREL: howto manager. (line 984) -* BFD_RELOC_ARC_S21H_PCREL_PLT: howto manager. (line 1038) -* BFD_RELOC_ARC_S21W_PCREL: howto manager. (line 985) -* BFD_RELOC_ARC_S21W_PCREL_PLT: howto manager. (line 1025) -* BFD_RELOC_ARC_S25H_PCREL: howto manager. (line 986) -* BFD_RELOC_ARC_S25H_PCREL_PLT: howto manager. (line 1026) -* BFD_RELOC_ARC_S25W_PCREL: howto manager. (line 987) -* BFD_RELOC_ARC_S25W_PCREL_PLT: howto manager. (line 1037) -* BFD_RELOC_ARC_SDA: howto manager. (line 982) -* BFD_RELOC_ARC_SDA16_LD: howto manager. (line 992) -* BFD_RELOC_ARC_SDA16_LD1: howto manager. (line 993) -* BFD_RELOC_ARC_SDA16_LD2: howto manager. (line 994) -* BFD_RELOC_ARC_SDA16_ST2: howto manager. (line 1013) -* BFD_RELOC_ARC_SDA32: howto manager. (line 988) -* BFD_RELOC_ARC_SDA32_ME: howto manager. (line 1001) -* BFD_RELOC_ARC_SDA_LDST: howto manager. (line 989) -* BFD_RELOC_ARC_SDA_LDST1: howto manager. (line 990) -* BFD_RELOC_ARC_SDA_LDST2: howto manager. (line 991) -* BFD_RELOC_ARC_SECTOFF: howto manager. (line 983) -* BFD_RELOC_ARC_SECTOFF_1: howto manager. (line 1011) -* BFD_RELOC_ARC_SECTOFF_2: howto manager. (line 1012) -* BFD_RELOC_ARC_SECTOFF_ME: howto manager. (line 1000) -* BFD_RELOC_ARC_SECTOFF_ME_1: howto manager. (line 1009) -* BFD_RELOC_ARC_SECTOFF_ME_2: howto manager. (line 1010) -* BFD_RELOC_ARC_TLS_DTPMOD: howto manager. (line 1027) -* BFD_RELOC_ARC_TLS_DTPOFF: howto manager. (line 1033) -* BFD_RELOC_ARC_TLS_DTPOFF_S9: howto manager. (line 1034) -* BFD_RELOC_ARC_TLS_GD_CALL: howto manager. (line 1031) -* BFD_RELOC_ARC_TLS_GD_GOT: howto manager. (line 1029) -* BFD_RELOC_ARC_TLS_GD_LD: howto manager. (line 1030) -* BFD_RELOC_ARC_TLS_IE_GOT: howto manager. (line 1032) -* BFD_RELOC_ARC_TLS_LE_32: howto manager. (line 1036) -* BFD_RELOC_ARC_TLS_LE_S9: howto manager. (line 1035) -* BFD_RELOC_ARC_TLS_TPOFF: howto manager. (line 1028) -* BFD_RELOC_ARC_W: howto manager. (line 996) -* BFD_RELOC_ARC_W_ME: howto manager. (line 1002) -* BFD_RELOC_ARM_ADRL_IMMEDIATE: howto manager. (line 847) -* BFD_RELOC_ARM_ADR_IMM: howto manager. (line 861) -* BFD_RELOC_ARM_ALU_PC_G0: howto manager. (line 809) -* BFD_RELOC_ARM_ALU_PC_G0_NC: howto manager. (line 808) -* BFD_RELOC_ARM_ALU_PC_G1: howto manager. (line 811) -* BFD_RELOC_ARM_ALU_PC_G1_NC: howto manager. (line 810) -* BFD_RELOC_ARM_ALU_PC_G2: howto manager. (line 812) -* BFD_RELOC_ARM_ALU_SB_G0: howto manager. (line 823) -* BFD_RELOC_ARM_ALU_SB_G0_NC: howto manager. (line 822) -* BFD_RELOC_ARM_ALU_SB_G1: howto manager. (line 825) -* BFD_RELOC_ARM_ALU_SB_G1_NC: howto manager. (line 824) -* BFD_RELOC_ARM_ALU_SB_G2: howto manager. (line 826) -* BFD_RELOC_ARM_CP_OFF_IMM: howto manager. (line 857) -* BFD_RELOC_ARM_CP_OFF_IMM_S2: howto manager. (line 858) -* BFD_RELOC_ARM_GLOB_DAT: howto manager. (line 785) -* BFD_RELOC_ARM_GOT32: howto manager. (line 786) -* BFD_RELOC_ARM_GOTOFF: howto manager. (line 789) -* BFD_RELOC_ARM_GOTPC: howto manager. (line 790) -* BFD_RELOC_ARM_GOT_PREL: howto manager. (line 791) -* BFD_RELOC_ARM_HVC: howto manager. (line 854) -* BFD_RELOC_ARM_HWLITERAL: howto manager. (line 868) -* BFD_RELOC_ARM_IMMEDIATE: howto manager. (line 846) -* BFD_RELOC_ARM_IN_POOL: howto manager. (line 864) -* BFD_RELOC_ARM_IRELATIVE: howto manager. (line 839) -* BFD_RELOC_ARM_JUMP_SLOT: howto manager. (line 784) -* BFD_RELOC_ARM_LDC_PC_G0: howto manager. (line 819) -* BFD_RELOC_ARM_LDC_PC_G1: howto manager. (line 820) -* BFD_RELOC_ARM_LDC_PC_G2: howto manager. (line 821) -* BFD_RELOC_ARM_LDC_SB_G0: howto manager. (line 833) -* BFD_RELOC_ARM_LDC_SB_G1: howto manager. (line 834) -* BFD_RELOC_ARM_LDC_SB_G2: howto manager. (line 835) -* BFD_RELOC_ARM_LDRS_PC_G0: howto manager. (line 816) -* BFD_RELOC_ARM_LDRS_PC_G1: howto manager. (line 817) -* BFD_RELOC_ARM_LDRS_PC_G2: howto manager. (line 818) -* BFD_RELOC_ARM_LDRS_SB_G0: howto manager. (line 830) -* BFD_RELOC_ARM_LDRS_SB_G1: howto manager. (line 831) -* BFD_RELOC_ARM_LDRS_SB_G2: howto manager. (line 832) -* BFD_RELOC_ARM_LDR_IMM: howto manager. (line 862) -* BFD_RELOC_ARM_LDR_PC_G0: howto manager. (line 813) -* BFD_RELOC_ARM_LDR_PC_G1: howto manager. (line 814) -* BFD_RELOC_ARM_LDR_PC_G2: howto manager. (line 815) -* BFD_RELOC_ARM_LDR_SB_G0: howto manager. (line 827) -* BFD_RELOC_ARM_LDR_SB_G1: howto manager. (line 828) -* BFD_RELOC_ARM_LDR_SB_G2: howto manager. (line 829) -* BFD_RELOC_ARM_LITERAL: howto manager. (line 863) -* BFD_RELOC_ARM_MOVT: howto manager. (line 776) -* BFD_RELOC_ARM_MOVT_PCREL: howto manager. (line 778) -* BFD_RELOC_ARM_MOVW: howto manager. (line 775) -* BFD_RELOC_ARM_MOVW_PCREL: howto manager. (line 777) -* BFD_RELOC_ARM_MULTI: howto manager. (line 856) -* BFD_RELOC_ARM_OFFSET_IMM: howto manager. (line 756) -* BFD_RELOC_ARM_OFFSET_IMM8: howto manager. (line 865) -* BFD_RELOC_ARM_PCREL_BLX: howto manager. (line 732) -* BFD_RELOC_ARM_PCREL_BRANCH: howto manager. (line 729) -* BFD_RELOC_ARM_PCREL_CALL: howto manager. (line 740) -* BFD_RELOC_ARM_PCREL_JUMP: howto manager. (line 743) -* BFD_RELOC_ARM_PLT32: howto manager. (line 787) -* BFD_RELOC_ARM_PREL31: howto manager. (line 773) -* BFD_RELOC_ARM_RELATIVE: howto manager. (line 788) -* BFD_RELOC_ARM_ROSEGREL32: howto manager. (line 765) -* BFD_RELOC_ARM_SBREL32: howto manager. (line 767) -* BFD_RELOC_ARM_SHIFT_IMM: howto manager. (line 852) -* BFD_RELOC_ARM_SMC: howto manager. (line 853) -* BFD_RELOC_ARM_SWI: howto manager. (line 855) -* BFD_RELOC_ARM_T32_ADD_IMM: howto manager. (line 849) -* BFD_RELOC_ARM_T32_ADD_PC12: howto manager. (line 851) -* BFD_RELOC_ARM_T32_CP_OFF_IMM: howto manager. (line 859) -* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2: howto manager. (line 860) -* BFD_RELOC_ARM_T32_IMM12: howto manager. (line 850) -* BFD_RELOC_ARM_T32_IMMEDIATE: howto manager. (line 848) -* BFD_RELOC_ARM_T32_OFFSET_IMM: howto manager. (line 867) -* BFD_RELOC_ARM_T32_OFFSET_U8: howto manager. (line 866) -* BFD_RELOC_ARM_TARGET1: howto manager. (line 762) -* BFD_RELOC_ARM_TARGET2: howto manager. (line 769) -* BFD_RELOC_ARM_THM_TLS_CALL: howto manager. (line 803) -* BFD_RELOC_ARM_THM_TLS_DESCSEQ: howto manager. (line 805) -* BFD_RELOC_ARM_THUMB_ADD: howto manager. (line 869) -* BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC: howto manager. (line 841) -* BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC: howto manager. (line 842) -* BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC: howto manager. (line 843) -* BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC: howto manager. (line 844) -* BFD_RELOC_ARM_THUMB_IMM: howto manager. (line 870) -* BFD_RELOC_ARM_THUMB_MOVT: howto manager. (line 780) -* BFD_RELOC_ARM_THUMB_MOVT_PCREL: howto manager. (line 782) -* BFD_RELOC_ARM_THUMB_MOVW: howto manager. (line 779) -* BFD_RELOC_ARM_THUMB_MOVW_PCREL: howto manager. (line 781) -* BFD_RELOC_ARM_THUMB_OFFSET: howto manager. (line 759) -* BFD_RELOC_ARM_THUMB_SHIFT: howto manager. (line 871) -* BFD_RELOC_ARM_TLS_CALL: howto manager. (line 802) -* BFD_RELOC_ARM_TLS_DESC: howto manager. (line 806) -* BFD_RELOC_ARM_TLS_DESCSEQ: howto manager. (line 804) -* BFD_RELOC_ARM_TLS_DTPMOD32: howto manager. (line 797) -* BFD_RELOC_ARM_TLS_DTPOFF32: howto manager. (line 796) -* BFD_RELOC_ARM_TLS_GD32: howto manager. (line 793) -* BFD_RELOC_ARM_TLS_GOTDESC: howto manager. (line 801) -* BFD_RELOC_ARM_TLS_IE32: howto manager. (line 799) -* BFD_RELOC_ARM_TLS_LDM32: howto manager. (line 795) -* BFD_RELOC_ARM_TLS_LDO32: howto manager. (line 794) -* BFD_RELOC_ARM_TLS_LE32: howto manager. (line 800) -* BFD_RELOC_ARM_TLS_TPOFF32: howto manager. (line 798) -* BFD_RELOC_ARM_V4BX: howto manager. (line 837) -* BFD_RELOC_AVR_13_PCREL: howto manager. (line 1658) -* BFD_RELOC_AVR_16_PM: howto manager. (line 1661) -* BFD_RELOC_AVR_6: howto manager. (line 1729) -* BFD_RELOC_AVR_6_ADIW: howto manager. (line 1732) -* BFD_RELOC_AVR_7_PCREL: howto manager. (line 1655) -* BFD_RELOC_AVR_8_HI: howto manager. (line 1738) -* BFD_RELOC_AVR_8_HLO: howto manager. (line 1741) -* BFD_RELOC_AVR_8_LO: howto manager. (line 1735) -* BFD_RELOC_AVR_CALL: howto manager. (line 1723) -* BFD_RELOC_AVR_DIFF16: howto manager. (line 1745) -* BFD_RELOC_AVR_DIFF32: howto manager. (line 1746) -* BFD_RELOC_AVR_DIFF8: howto manager. (line 1744) -* BFD_RELOC_AVR_HH8_LDI: howto manager. (line 1670) -* BFD_RELOC_AVR_HH8_LDI_NEG: howto manager. (line 1685) -* BFD_RELOC_AVR_HH8_LDI_PM: howto manager. (line 1708) -* BFD_RELOC_AVR_HH8_LDI_PM_NEG: howto manager. (line 1719) -* BFD_RELOC_AVR_HI8_LDI: howto manager. (line 1667) -* BFD_RELOC_AVR_HI8_LDI_GS: howto manager. (line 1703) -* BFD_RELOC_AVR_HI8_LDI_NEG: howto manager. (line 1681) -* BFD_RELOC_AVR_HI8_LDI_PM: howto manager. (line 1700) -* BFD_RELOC_AVR_HI8_LDI_PM_NEG: howto manager. (line 1715) -* BFD_RELOC_AVR_LDI: howto manager. (line 1726) -* BFD_RELOC_AVR_LDS_STS_16: howto manager. (line 1753) -* BFD_RELOC_AVR_LO8_LDI: howto manager. (line 1664) -* BFD_RELOC_AVR_LO8_LDI_GS: howto manager. (line 1695) -* BFD_RELOC_AVR_LO8_LDI_NEG: howto manager. (line 1677) -* BFD_RELOC_AVR_LO8_LDI_PM: howto manager. (line 1692) -* BFD_RELOC_AVR_LO8_LDI_PM_NEG: howto manager. (line 1712) -* BFD_RELOC_AVR_MS8_LDI: howto manager. (line 1674) -* BFD_RELOC_AVR_MS8_LDI_NEG: howto manager. (line 1689) -* BFD_RELOC_AVR_PORT5: howto manager. (line 1759) -* BFD_RELOC_AVR_PORT6: howto manager. (line 1756) -* BFD_RELOC_BFIN_10_PCREL: howto manager. (line 1050) -* BFD_RELOC_BFIN_11_PCREL: howto manager. (line 1052) -* BFD_RELOC_BFIN_12_PCREL_JUMP: howto manager. (line 1054) -* BFD_RELOC_BFIN_12_PCREL_JUMP_S: howto manager. (line 1056) -* BFD_RELOC_BFIN_16_HIGH: howto manager. (line 1042) -* BFD_RELOC_BFIN_16_IMM: howto manager. (line 1040) -* BFD_RELOC_BFIN_16_LOW: howto manager. (line 1048) -* BFD_RELOC_BFIN_24_PCREL_CALL_X: howto manager. (line 1058) -* BFD_RELOC_BFIN_24_PCREL_JUMP_L: howto manager. (line 1060) -* BFD_RELOC_BFIN_4_PCREL: howto manager. (line 1044) -* BFD_RELOC_BFIN_5_PCREL: howto manager. (line 1046) -* BFD_RELOC_BFIN_FUNCDESC: howto manager. (line 1065) -* BFD_RELOC_BFIN_FUNCDESC_GOT17M4: howto manager. (line 1066) -* BFD_RELOC_BFIN_FUNCDESC_GOTHI: howto manager. (line 1067) -* BFD_RELOC_BFIN_FUNCDESC_GOTLO: howto manager. (line 1068) -* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4: howto manager. (line 1070) -* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI: howto manager. (line 1071) -* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO: howto manager. (line 1072) -* BFD_RELOC_BFIN_FUNCDESC_VALUE: howto manager. (line 1069) -* BFD_RELOC_BFIN_GOT: howto manager. (line 1077) -* BFD_RELOC_BFIN_GOT17M4: howto manager. (line 1062) -* BFD_RELOC_BFIN_GOTHI: howto manager. (line 1063) -* BFD_RELOC_BFIN_GOTLO: howto manager. (line 1064) -* BFD_RELOC_BFIN_GOTOFF17M4: howto manager. (line 1073) -* BFD_RELOC_BFIN_GOTOFFHI: howto manager. (line 1074) -* BFD_RELOC_BFIN_GOTOFFLO: howto manager. (line 1075) -* BFD_RELOC_BFIN_PLTPC: howto manager. (line 1079) -* BFD_RELOC_C6000_ABS_H16: howto manager. (line 1500) -* BFD_RELOC_C6000_ABS_L16: howto manager. (line 1499) -* BFD_RELOC_C6000_ABS_S16: howto manager. (line 1498) -* BFD_RELOC_C6000_ALIGN: howto manager. (line 1521) -* BFD_RELOC_C6000_COPY: howto manager. (line 1516) -* BFD_RELOC_C6000_DSBT_INDEX: howto manager. (line 1514) -* BFD_RELOC_C6000_EHTYPE: howto manager. (line 1518) -* BFD_RELOC_C6000_FPHEAD: howto manager. (line 1522) -* BFD_RELOC_C6000_JUMP_SLOT: howto manager. (line 1517) -* BFD_RELOC_C6000_NOCMP: howto manager. (line 1523) -* BFD_RELOC_C6000_PCR_H16: howto manager. (line 1519) -* BFD_RELOC_C6000_PCR_L16: howto manager. (line 1520) -* BFD_RELOC_C6000_PCR_S10: howto manager. (line 1496) -* BFD_RELOC_C6000_PCR_S12: howto manager. (line 1495) -* BFD_RELOC_C6000_PCR_S21: howto manager. (line 1494) -* BFD_RELOC_C6000_PCR_S7: howto manager. (line 1497) -* BFD_RELOC_C6000_PREL31: howto manager. (line 1515) -* BFD_RELOC_C6000_SBR_GOT_H16_W: howto manager. (line 1513) -* BFD_RELOC_C6000_SBR_GOT_L16_W: howto manager. (line 1512) -* BFD_RELOC_C6000_SBR_GOT_U15_W: howto manager. (line 1511) -* BFD_RELOC_C6000_SBR_H16_B: howto manager. (line 1508) -* BFD_RELOC_C6000_SBR_H16_H: howto manager. (line 1509) -* BFD_RELOC_C6000_SBR_H16_W: howto manager. (line 1510) -* BFD_RELOC_C6000_SBR_L16_B: howto manager. (line 1505) -* BFD_RELOC_C6000_SBR_L16_H: howto manager. (line 1506) -* BFD_RELOC_C6000_SBR_L16_W: howto manager. (line 1507) -* BFD_RELOC_C6000_SBR_S16: howto manager. (line 1504) -* BFD_RELOC_C6000_SBR_U15_B: howto manager. (line 1501) -* BFD_RELOC_C6000_SBR_U15_H: howto manager. (line 1502) -* BFD_RELOC_C6000_SBR_U15_W: howto manager. (line 1503) +* BFD_RELOC_ARC_16: howto manager. (line 977) +* BFD_RELOC_ARC_24: howto manager. (line 978) +* BFD_RELOC_ARC_32: howto manager. (line 979) +* BFD_RELOC_ARC_32_ME: howto manager. (line 999) +* BFD_RELOC_ARC_32_ME_S: howto manager. (line 1000) +* BFD_RELOC_ARC_32_PCREL: howto manager. (line 1016) +* BFD_RELOC_ARC_8: howto manager. (line 976) +* BFD_RELOC_ARC_COPY: howto manager. (line 1021) +* BFD_RELOC_ARC_GLOB_DAT: howto manager. (line 1022) +* BFD_RELOC_ARC_GOT32: howto manager. (line 1018) +* BFD_RELOC_ARC_GOTOFF: howto manager. (line 1025) +* BFD_RELOC_ARC_GOTPC: howto manager. (line 1026) +* BFD_RELOC_ARC_GOTPC32: howto manager. (line 1019) +* BFD_RELOC_ARC_JMP_SLOT: howto manager. (line 1023) +* BFD_RELOC_ARC_N16: howto manager. (line 981) +* BFD_RELOC_ARC_N24: howto manager. (line 982) +* BFD_RELOC_ARC_N32: howto manager. (line 983) +* BFD_RELOC_ARC_N32_ME: howto manager. (line 1001) +* BFD_RELOC_ARC_N8: howto manager. (line 980) +* BFD_RELOC_ARC_NONE: howto manager. (line 975) +* BFD_RELOC_ARC_NPS_CMEM16: howto manager. (line 1041) +* BFD_RELOC_ARC_PC32: howto manager. (line 1017) +* BFD_RELOC_ARC_PLT32: howto manager. (line 1020) +* BFD_RELOC_ARC_RELATIVE: howto manager. (line 1024) +* BFD_RELOC_ARC_S13_PCREL: howto manager. (line 997) +* BFD_RELOC_ARC_S21H_PCREL: howto manager. (line 986) +* BFD_RELOC_ARC_S21H_PCREL_PLT: howto manager. (line 1040) +* BFD_RELOC_ARC_S21W_PCREL: howto manager. (line 987) +* BFD_RELOC_ARC_S21W_PCREL_PLT: howto manager. (line 1027) +* BFD_RELOC_ARC_S25H_PCREL: howto manager. (line 988) +* BFD_RELOC_ARC_S25H_PCREL_PLT: howto manager. (line 1028) +* BFD_RELOC_ARC_S25W_PCREL: howto manager. (line 989) +* BFD_RELOC_ARC_S25W_PCREL_PLT: howto manager. (line 1039) +* BFD_RELOC_ARC_SDA: howto manager. (line 984) +* BFD_RELOC_ARC_SDA16_LD: howto manager. (line 994) +* BFD_RELOC_ARC_SDA16_LD1: howto manager. (line 995) +* BFD_RELOC_ARC_SDA16_LD2: howto manager. (line 996) +* BFD_RELOC_ARC_SDA16_ST2: howto manager. (line 1015) +* BFD_RELOC_ARC_SDA32: howto manager. (line 990) +* BFD_RELOC_ARC_SDA32_ME: howto manager. (line 1003) +* BFD_RELOC_ARC_SDA_LDST: howto manager. (line 991) +* BFD_RELOC_ARC_SDA_LDST1: howto manager. (line 992) +* BFD_RELOC_ARC_SDA_LDST2: howto manager. (line 993) +* BFD_RELOC_ARC_SECTOFF: howto manager. (line 985) +* BFD_RELOC_ARC_SECTOFF_1: howto manager. (line 1013) +* BFD_RELOC_ARC_SECTOFF_2: howto manager. (line 1014) +* BFD_RELOC_ARC_SECTOFF_ME: howto manager. (line 1002) +* BFD_RELOC_ARC_SECTOFF_ME_1: howto manager. (line 1011) +* BFD_RELOC_ARC_SECTOFF_ME_2: howto manager. (line 1012) +* BFD_RELOC_ARC_TLS_DTPMOD: howto manager. (line 1029) +* BFD_RELOC_ARC_TLS_DTPOFF: howto manager. (line 1035) +* BFD_RELOC_ARC_TLS_DTPOFF_S9: howto manager. (line 1036) +* BFD_RELOC_ARC_TLS_GD_CALL: howto manager. (line 1033) +* BFD_RELOC_ARC_TLS_GD_GOT: howto manager. (line 1031) +* BFD_RELOC_ARC_TLS_GD_LD: howto manager. (line 1032) +* BFD_RELOC_ARC_TLS_IE_GOT: howto manager. (line 1034) +* BFD_RELOC_ARC_TLS_LE_32: howto manager. (line 1038) +* BFD_RELOC_ARC_TLS_LE_S9: howto manager. (line 1037) +* BFD_RELOC_ARC_TLS_TPOFF: howto manager. (line 1030) +* BFD_RELOC_ARC_W: howto manager. (line 998) +* BFD_RELOC_ARC_W_ME: howto manager. (line 1004) +* BFD_RELOC_ARM_ADRL_IMMEDIATE: howto manager. (line 849) +* BFD_RELOC_ARM_ADR_IMM: howto manager. (line 863) +* BFD_RELOC_ARM_ALU_PC_G0: howto manager. (line 811) +* BFD_RELOC_ARM_ALU_PC_G0_NC: howto manager. (line 810) +* BFD_RELOC_ARM_ALU_PC_G1: howto manager. (line 813) +* BFD_RELOC_ARM_ALU_PC_G1_NC: howto manager. (line 812) +* BFD_RELOC_ARM_ALU_PC_G2: howto manager. (line 814) +* BFD_RELOC_ARM_ALU_SB_G0: howto manager. (line 825) +* BFD_RELOC_ARM_ALU_SB_G0_NC: howto manager. (line 824) +* BFD_RELOC_ARM_ALU_SB_G1: howto manager. (line 827) +* BFD_RELOC_ARM_ALU_SB_G1_NC: howto manager. (line 826) +* BFD_RELOC_ARM_ALU_SB_G2: howto manager. (line 828) +* BFD_RELOC_ARM_CP_OFF_IMM: howto manager. (line 859) +* BFD_RELOC_ARM_CP_OFF_IMM_S2: howto manager. (line 860) +* BFD_RELOC_ARM_GLOB_DAT: howto manager. (line 787) +* BFD_RELOC_ARM_GOT32: howto manager. (line 788) +* BFD_RELOC_ARM_GOTOFF: howto manager. (line 791) +* BFD_RELOC_ARM_GOTPC: howto manager. (line 792) +* BFD_RELOC_ARM_GOT_PREL: howto manager. (line 793) +* BFD_RELOC_ARM_HVC: howto manager. (line 856) +* BFD_RELOC_ARM_HWLITERAL: howto manager. (line 870) +* BFD_RELOC_ARM_IMMEDIATE: howto manager. (line 848) +* BFD_RELOC_ARM_IN_POOL: howto manager. (line 866) +* BFD_RELOC_ARM_IRELATIVE: howto manager. (line 841) +* BFD_RELOC_ARM_JUMP_SLOT: howto manager. (line 786) +* BFD_RELOC_ARM_LDC_PC_G0: howto manager. (line 821) +* BFD_RELOC_ARM_LDC_PC_G1: howto manager. (line 822) +* BFD_RELOC_ARM_LDC_PC_G2: howto manager. (line 823) +* BFD_RELOC_ARM_LDC_SB_G0: howto manager. (line 835) +* BFD_RELOC_ARM_LDC_SB_G1: howto manager. (line 836) +* BFD_RELOC_ARM_LDC_SB_G2: howto manager. (line 837) +* BFD_RELOC_ARM_LDRS_PC_G0: howto manager. (line 818) +* BFD_RELOC_ARM_LDRS_PC_G1: howto manager. (line 819) +* BFD_RELOC_ARM_LDRS_PC_G2: howto manager. (line 820) +* BFD_RELOC_ARM_LDRS_SB_G0: howto manager. (line 832) +* BFD_RELOC_ARM_LDRS_SB_G1: howto manager. (line 833) +* BFD_RELOC_ARM_LDRS_SB_G2: howto manager. (line 834) +* BFD_RELOC_ARM_LDR_IMM: howto manager. (line 864) +* BFD_RELOC_ARM_LDR_PC_G0: howto manager. (line 815) +* BFD_RELOC_ARM_LDR_PC_G1: howto manager. (line 816) +* BFD_RELOC_ARM_LDR_PC_G2: howto manager. (line 817) +* BFD_RELOC_ARM_LDR_SB_G0: howto manager. (line 829) +* BFD_RELOC_ARM_LDR_SB_G1: howto manager. (line 830) +* BFD_RELOC_ARM_LDR_SB_G2: howto manager. (line 831) +* BFD_RELOC_ARM_LITERAL: howto manager. (line 865) +* BFD_RELOC_ARM_MOVT: howto manager. (line 778) +* BFD_RELOC_ARM_MOVT_PCREL: howto manager. (line 780) +* BFD_RELOC_ARM_MOVW: howto manager. (line 777) +* BFD_RELOC_ARM_MOVW_PCREL: howto manager. (line 779) +* BFD_RELOC_ARM_MULTI: howto manager. (line 858) +* BFD_RELOC_ARM_OFFSET_IMM: howto manager. (line 758) +* BFD_RELOC_ARM_OFFSET_IMM8: howto manager. (line 867) +* BFD_RELOC_ARM_PCREL_BLX: howto manager. (line 734) +* BFD_RELOC_ARM_PCREL_BRANCH: howto manager. (line 731) +* BFD_RELOC_ARM_PCREL_CALL: howto manager. (line 742) +* BFD_RELOC_ARM_PCREL_JUMP: howto manager. (line 745) +* BFD_RELOC_ARM_PLT32: howto manager. (line 789) +* BFD_RELOC_ARM_PREL31: howto manager. (line 775) +* BFD_RELOC_ARM_RELATIVE: howto manager. (line 790) +* BFD_RELOC_ARM_ROSEGREL32: howto manager. (line 767) +* BFD_RELOC_ARM_SBREL32: howto manager. (line 769) +* BFD_RELOC_ARM_SHIFT_IMM: howto manager. (line 854) +* BFD_RELOC_ARM_SMC: howto manager. (line 855) +* BFD_RELOC_ARM_SWI: howto manager. (line 857) +* BFD_RELOC_ARM_T32_ADD_IMM: howto manager. (line 851) +* BFD_RELOC_ARM_T32_ADD_PC12: howto manager. (line 853) +* BFD_RELOC_ARM_T32_CP_OFF_IMM: howto manager. (line 861) +* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2: howto manager. (line 862) +* BFD_RELOC_ARM_T32_IMM12: howto manager. (line 852) +* BFD_RELOC_ARM_T32_IMMEDIATE: howto manager. (line 850) +* BFD_RELOC_ARM_T32_OFFSET_IMM: howto manager. (line 869) +* BFD_RELOC_ARM_T32_OFFSET_U8: howto manager. (line 868) +* BFD_RELOC_ARM_TARGET1: howto manager. (line 764) +* BFD_RELOC_ARM_TARGET2: howto manager. (line 771) +* BFD_RELOC_ARM_THM_TLS_CALL: howto manager. (line 805) +* BFD_RELOC_ARM_THM_TLS_DESCSEQ: howto manager. (line 807) +* BFD_RELOC_ARM_THUMB_ADD: howto manager. (line 871) +* BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC: howto manager. (line 843) +* BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC: howto manager. (line 844) +* BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC: howto manager. (line 845) +* BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC: howto manager. (line 846) +* BFD_RELOC_ARM_THUMB_IMM: howto manager. (line 872) +* BFD_RELOC_ARM_THUMB_MOVT: howto manager. (line 782) +* BFD_RELOC_ARM_THUMB_MOVT_PCREL: howto manager. (line 784) +* BFD_RELOC_ARM_THUMB_MOVW: howto manager. (line 781) +* BFD_RELOC_ARM_THUMB_MOVW_PCREL: howto manager. (line 783) +* BFD_RELOC_ARM_THUMB_OFFSET: howto manager. (line 761) +* BFD_RELOC_ARM_THUMB_SHIFT: howto manager. (line 873) +* BFD_RELOC_ARM_TLS_CALL: howto manager. (line 804) +* BFD_RELOC_ARM_TLS_DESC: howto manager. (line 808) +* BFD_RELOC_ARM_TLS_DESCSEQ: howto manager. (line 806) +* BFD_RELOC_ARM_TLS_DTPMOD32: howto manager. (line 799) +* BFD_RELOC_ARM_TLS_DTPOFF32: howto manager. (line 798) +* BFD_RELOC_ARM_TLS_GD32: howto manager. (line 795) +* BFD_RELOC_ARM_TLS_GOTDESC: howto manager. (line 803) +* BFD_RELOC_ARM_TLS_IE32: howto manager. (line 801) +* BFD_RELOC_ARM_TLS_LDM32: howto manager. (line 797) +* BFD_RELOC_ARM_TLS_LDO32: howto manager. (line 796) +* BFD_RELOC_ARM_TLS_LE32: howto manager. (line 802) +* BFD_RELOC_ARM_TLS_TPOFF32: howto manager. (line 800) +* BFD_RELOC_ARM_V4BX: howto manager. (line 839) +* BFD_RELOC_AVR_13_PCREL: howto manager. (line 1661) +* BFD_RELOC_AVR_16_PM: howto manager. (line 1664) +* BFD_RELOC_AVR_6: howto manager. (line 1732) +* BFD_RELOC_AVR_6_ADIW: howto manager. (line 1735) +* BFD_RELOC_AVR_7_PCREL: howto manager. (line 1658) +* BFD_RELOC_AVR_8_HI: howto manager. (line 1741) +* BFD_RELOC_AVR_8_HLO: howto manager. (line 1744) +* BFD_RELOC_AVR_8_LO: howto manager. (line 1738) +* BFD_RELOC_AVR_CALL: howto manager. (line 1726) +* BFD_RELOC_AVR_DIFF16: howto manager. (line 1748) +* BFD_RELOC_AVR_DIFF32: howto manager. (line 1749) +* BFD_RELOC_AVR_DIFF8: howto manager. (line 1747) +* BFD_RELOC_AVR_HH8_LDI: howto manager. (line 1673) +* BFD_RELOC_AVR_HH8_LDI_NEG: howto manager. (line 1688) +* BFD_RELOC_AVR_HH8_LDI_PM: howto manager. (line 1711) +* BFD_RELOC_AVR_HH8_LDI_PM_NEG: howto manager. (line 1722) +* BFD_RELOC_AVR_HI8_LDI: howto manager. (line 1670) +* BFD_RELOC_AVR_HI8_LDI_GS: howto manager. (line 1706) +* BFD_RELOC_AVR_HI8_LDI_NEG: howto manager. (line 1684) +* BFD_RELOC_AVR_HI8_LDI_PM: howto manager. (line 1703) +* BFD_RELOC_AVR_HI8_LDI_PM_NEG: howto manager. (line 1718) +* BFD_RELOC_AVR_LDI: howto manager. (line 1729) +* BFD_RELOC_AVR_LDS_STS_16: howto manager. (line 1756) +* BFD_RELOC_AVR_LO8_LDI: howto manager. (line 1667) +* BFD_RELOC_AVR_LO8_LDI_GS: howto manager. (line 1698) +* BFD_RELOC_AVR_LO8_LDI_NEG: howto manager. (line 1680) +* BFD_RELOC_AVR_LO8_LDI_PM: howto manager. (line 1695) +* BFD_RELOC_AVR_LO8_LDI_PM_NEG: howto manager. (line 1715) +* BFD_RELOC_AVR_MS8_LDI: howto manager. (line 1677) +* BFD_RELOC_AVR_MS8_LDI_NEG: howto manager. (line 1692) +* BFD_RELOC_AVR_PORT5: howto manager. (line 1762) +* BFD_RELOC_AVR_PORT6: howto manager. (line 1759) +* BFD_RELOC_BFIN_10_PCREL: howto manager. (line 1053) +* BFD_RELOC_BFIN_11_PCREL: howto manager. (line 1055) +* BFD_RELOC_BFIN_12_PCREL_JUMP: howto manager. (line 1057) +* BFD_RELOC_BFIN_12_PCREL_JUMP_S: howto manager. (line 1059) +* BFD_RELOC_BFIN_16_HIGH: howto manager. (line 1045) +* BFD_RELOC_BFIN_16_IMM: howto manager. (line 1043) +* BFD_RELOC_BFIN_16_LOW: howto manager. (line 1051) +* BFD_RELOC_BFIN_24_PCREL_CALL_X: howto manager. (line 1061) +* BFD_RELOC_BFIN_24_PCREL_JUMP_L: howto manager. (line 1063) +* BFD_RELOC_BFIN_4_PCREL: howto manager. (line 1047) +* BFD_RELOC_BFIN_5_PCREL: howto manager. (line 1049) +* BFD_RELOC_BFIN_FUNCDESC: howto manager. (line 1068) +* BFD_RELOC_BFIN_FUNCDESC_GOT17M4: howto manager. (line 1069) +* BFD_RELOC_BFIN_FUNCDESC_GOTHI: howto manager. (line 1070) +* BFD_RELOC_BFIN_FUNCDESC_GOTLO: howto manager. (line 1071) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4: howto manager. (line 1073) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI: howto manager. (line 1074) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO: howto manager. (line 1075) +* BFD_RELOC_BFIN_FUNCDESC_VALUE: howto manager. (line 1072) +* BFD_RELOC_BFIN_GOT: howto manager. (line 1080) +* BFD_RELOC_BFIN_GOT17M4: howto manager. (line 1065) +* BFD_RELOC_BFIN_GOTHI: howto manager. (line 1066) +* BFD_RELOC_BFIN_GOTLO: howto manager. (line 1067) +* BFD_RELOC_BFIN_GOTOFF17M4: howto manager. (line 1076) +* BFD_RELOC_BFIN_GOTOFFHI: howto manager. (line 1077) +* BFD_RELOC_BFIN_GOTOFFLO: howto manager. (line 1078) +* BFD_RELOC_BFIN_PLTPC: howto manager. (line 1082) +* BFD_RELOC_C6000_ABS_H16: howto manager. (line 1503) +* BFD_RELOC_C6000_ABS_L16: howto manager. (line 1502) +* BFD_RELOC_C6000_ABS_S16: howto manager. (line 1501) +* BFD_RELOC_C6000_ALIGN: howto manager. (line 1524) +* BFD_RELOC_C6000_COPY: howto manager. (line 1519) +* BFD_RELOC_C6000_DSBT_INDEX: howto manager. (line 1517) +* BFD_RELOC_C6000_EHTYPE: howto manager. (line 1521) +* BFD_RELOC_C6000_FPHEAD: howto manager. (line 1525) +* BFD_RELOC_C6000_JUMP_SLOT: howto manager. (line 1520) +* BFD_RELOC_C6000_NOCMP: howto manager. (line 1526) +* BFD_RELOC_C6000_PCR_H16: howto manager. (line 1522) +* BFD_RELOC_C6000_PCR_L16: howto manager. (line 1523) +* BFD_RELOC_C6000_PCR_S10: howto manager. (line 1499) +* BFD_RELOC_C6000_PCR_S12: howto manager. (line 1498) +* BFD_RELOC_C6000_PCR_S21: howto manager. (line 1497) +* BFD_RELOC_C6000_PCR_S7: howto manager. (line 1500) +* BFD_RELOC_C6000_PREL31: howto manager. (line 1518) +* BFD_RELOC_C6000_SBR_GOT_H16_W: howto manager. (line 1516) +* BFD_RELOC_C6000_SBR_GOT_L16_W: howto manager. (line 1515) +* BFD_RELOC_C6000_SBR_GOT_U15_W: howto manager. (line 1514) +* BFD_RELOC_C6000_SBR_H16_B: howto manager. (line 1511) +* BFD_RELOC_C6000_SBR_H16_H: howto manager. (line 1512) +* BFD_RELOC_C6000_SBR_H16_W: howto manager. (line 1513) +* BFD_RELOC_C6000_SBR_L16_B: howto manager. (line 1508) +* BFD_RELOC_C6000_SBR_L16_H: howto manager. (line 1509) +* BFD_RELOC_C6000_SBR_L16_W: howto manager. (line 1510) +* BFD_RELOC_C6000_SBR_S16: howto manager. (line 1507) +* BFD_RELOC_C6000_SBR_U15_B: howto manager. (line 1504) +* BFD_RELOC_C6000_SBR_U15_H: howto manager. (line 1505) +* BFD_RELOC_C6000_SBR_U15_W: howto manager. (line 1506) * bfd_reloc_code_type: howto manager. (line 9) -* BFD_RELOC_CR16_ABS20: howto manager. (line 2188) -* BFD_RELOC_CR16_ABS24: howto manager. (line 2189) -* BFD_RELOC_CR16_DISP16: howto manager. (line 2199) -* BFD_RELOC_CR16_DISP20: howto manager. (line 2200) -* BFD_RELOC_CR16_DISP24: howto manager. (line 2201) -* BFD_RELOC_CR16_DISP24a: howto manager. (line 2202) -* BFD_RELOC_CR16_DISP4: howto manager. (line 2197) -* BFD_RELOC_CR16_DISP8: howto manager. (line 2198) -* BFD_RELOC_CR16_GLOB_DAT: howto manager. (line 2208) -* BFD_RELOC_CR16_GOTC_REGREL20: howto manager. (line 2207) -* BFD_RELOC_CR16_GOT_REGREL20: howto manager. (line 2206) -* BFD_RELOC_CR16_IMM16: howto manager. (line 2192) -* BFD_RELOC_CR16_IMM20: howto manager. (line 2193) -* BFD_RELOC_CR16_IMM24: howto manager. (line 2194) -* BFD_RELOC_CR16_IMM32: howto manager. (line 2195) -* BFD_RELOC_CR16_IMM32a: howto manager. (line 2196) -* BFD_RELOC_CR16_IMM4: howto manager. (line 2190) -* BFD_RELOC_CR16_IMM8: howto manager. (line 2191) -* BFD_RELOC_CR16_NUM16: howto manager. (line 2177) -* BFD_RELOC_CR16_NUM32: howto manager. (line 2178) -* BFD_RELOC_CR16_NUM32a: howto manager. (line 2179) -* BFD_RELOC_CR16_NUM8: howto manager. (line 2176) -* BFD_RELOC_CR16_REGREL0: howto manager. (line 2180) -* BFD_RELOC_CR16_REGREL14: howto manager. (line 2183) -* BFD_RELOC_CR16_REGREL14a: howto manager. (line 2184) -* BFD_RELOC_CR16_REGREL16: howto manager. (line 2185) -* BFD_RELOC_CR16_REGREL20: howto manager. (line 2186) -* BFD_RELOC_CR16_REGREL20a: howto manager. (line 2187) -* BFD_RELOC_CR16_REGREL4: howto manager. (line 2181) -* BFD_RELOC_CR16_REGREL4a: howto manager. (line 2182) -* BFD_RELOC_CR16_SWITCH16: howto manager. (line 2204) -* BFD_RELOC_CR16_SWITCH32: howto manager. (line 2205) -* BFD_RELOC_CR16_SWITCH8: howto manager. (line 2203) -* BFD_RELOC_CRIS_16_DTPREL: howto manager. (line 2268) -* BFD_RELOC_CRIS_16_GOT: howto manager. (line 2250) -* BFD_RELOC_CRIS_16_GOTPLT: howto manager. (line 2254) -* BFD_RELOC_CRIS_16_GOT_GD: howto manager. (line 2264) -* BFD_RELOC_CRIS_16_GOT_TPREL: howto manager. (line 2270) -* BFD_RELOC_CRIS_16_TPREL: howto manager. (line 2272) -* BFD_RELOC_CRIS_32_DTPREL: howto manager. (line 2267) -* BFD_RELOC_CRIS_32_GD: howto manager. (line 2265) -* BFD_RELOC_CRIS_32_GOT: howto manager. (line 2248) -* BFD_RELOC_CRIS_32_GOTPLT: howto manager. (line 2252) -* BFD_RELOC_CRIS_32_GOTREL: howto manager. (line 2256) -* BFD_RELOC_CRIS_32_GOT_GD: howto manager. (line 2263) -* BFD_RELOC_CRIS_32_GOT_TPREL: howto manager. (line 2269) -* BFD_RELOC_CRIS_32_IE: howto manager. (line 2274) -* BFD_RELOC_CRIS_32_PLT_GOTREL: howto manager. (line 2258) -* BFD_RELOC_CRIS_32_PLT_PCREL: howto manager. (line 2260) -* BFD_RELOC_CRIS_32_TPREL: howto manager. (line 2271) -* BFD_RELOC_CRIS_BDISP8: howto manager. (line 2231) -* BFD_RELOC_CRIS_COPY: howto manager. (line 2243) -* BFD_RELOC_CRIS_DTP: howto manager. (line 2266) -* BFD_RELOC_CRIS_DTPMOD: howto manager. (line 2273) -* BFD_RELOC_CRIS_GLOB_DAT: howto manager. (line 2244) -* BFD_RELOC_CRIS_JUMP_SLOT: howto manager. (line 2245) -* BFD_RELOC_CRIS_LAPCQ_OFFSET: howto manager. (line 2239) -* BFD_RELOC_CRIS_RELATIVE: howto manager. (line 2246) -* BFD_RELOC_CRIS_SIGNED_16: howto manager. (line 2237) -* BFD_RELOC_CRIS_SIGNED_6: howto manager. (line 2233) -* BFD_RELOC_CRIS_SIGNED_8: howto manager. (line 2235) -* BFD_RELOC_CRIS_UNSIGNED_16: howto manager. (line 2238) -* BFD_RELOC_CRIS_UNSIGNED_4: howto manager. (line 2240) -* BFD_RELOC_CRIS_UNSIGNED_5: howto manager. (line 2232) -* BFD_RELOC_CRIS_UNSIGNED_6: howto manager. (line 2234) -* BFD_RELOC_CRIS_UNSIGNED_8: howto manager. (line 2236) -* BFD_RELOC_CRX_ABS16: howto manager. (line 2220) -* BFD_RELOC_CRX_ABS32: howto manager. (line 2221) -* BFD_RELOC_CRX_IMM16: howto manager. (line 2225) -* BFD_RELOC_CRX_IMM32: howto manager. (line 2226) -* BFD_RELOC_CRX_NUM16: howto manager. (line 2223) -* BFD_RELOC_CRX_NUM32: howto manager. (line 2224) -* BFD_RELOC_CRX_NUM8: howto manager. (line 2222) -* BFD_RELOC_CRX_REGREL12: howto manager. (line 2216) -* BFD_RELOC_CRX_REGREL22: howto manager. (line 2217) -* BFD_RELOC_CRX_REGREL28: howto manager. (line 2218) -* BFD_RELOC_CRX_REGREL32: howto manager. (line 2219) -* BFD_RELOC_CRX_REL16: howto manager. (line 2213) -* BFD_RELOC_CRX_REL24: howto manager. (line 2214) -* BFD_RELOC_CRX_REL32: howto manager. (line 2215) -* BFD_RELOC_CRX_REL4: howto manager. (line 2210) -* BFD_RELOC_CRX_REL8: howto manager. (line 2211) -* BFD_RELOC_CRX_REL8_CMP: howto manager. (line 2212) -* BFD_RELOC_CRX_SWITCH16: howto manager. (line 2228) -* BFD_RELOC_CRX_SWITCH32: howto manager. (line 2229) -* BFD_RELOC_CRX_SWITCH8: howto manager. (line 2227) -* BFD_RELOC_CTOR: howto manager. (line 724) -* BFD_RELOC_D10V_10_PCREL_L: howto manager. (line 1124) -* BFD_RELOC_D10V_10_PCREL_R: howto manager. (line 1121) -* BFD_RELOC_D10V_18: howto manager. (line 1128) -* BFD_RELOC_D10V_18_PCREL: howto manager. (line 1130) -* BFD_RELOC_D30V_15: howto manager. (line 1141) -* BFD_RELOC_D30V_15_PCREL: howto manager. (line 1144) -* BFD_RELOC_D30V_15_PCREL_R: howto manager. (line 1147) -* BFD_RELOC_D30V_21: howto manager. (line 1151) -* BFD_RELOC_D30V_21_PCREL: howto manager. (line 1154) -* BFD_RELOC_D30V_21_PCREL_R: howto manager. (line 1157) -* BFD_RELOC_D30V_32: howto manager. (line 1161) -* BFD_RELOC_D30V_32_PCREL: howto manager. (line 1163) -* BFD_RELOC_D30V_6: howto manager. (line 1132) -* BFD_RELOC_D30V_9_PCREL: howto manager. (line 1134) -* BFD_RELOC_D30V_9_PCREL_R: howto manager. (line 1137) -* BFD_RELOC_DLX_HI16_S: howto manager. (line 1165) -* BFD_RELOC_DLX_JMP26: howto manager. (line 1169) -* BFD_RELOC_DLX_LO16: howto manager. (line 1167) -* BFD_RELOC_EPIPHANY_HIGH: howto manager. (line 3137) -* BFD_RELOC_EPIPHANY_IMM11: howto manager. (line 3143) -* BFD_RELOC_EPIPHANY_IMM8: howto manager. (line 3146) -* BFD_RELOC_EPIPHANY_LOW: howto manager. (line 3139) -* BFD_RELOC_EPIPHANY_SIMM11: howto manager. (line 3141) -* BFD_RELOC_EPIPHANY_SIMM24: howto manager. (line 3135) -* BFD_RELOC_EPIPHANY_SIMM8: howto manager. (line 3133) -* BFD_RELOC_FR30_10_IN_8: howto manager. (line 1539) -* BFD_RELOC_FR30_12_PCREL: howto manager. (line 1545) -* BFD_RELOC_FR30_20: howto manager. (line 1527) -* BFD_RELOC_FR30_48: howto manager. (line 1525) -* BFD_RELOC_FR30_6_IN_4: howto manager. (line 1530) -* BFD_RELOC_FR30_8_IN_8: howto manager. (line 1533) -* BFD_RELOC_FR30_9_IN_8: howto manager. (line 1536) -* BFD_RELOC_FR30_9_PCREL: howto manager. (line 1542) -* BFD_RELOC_FRV_FUNCDESC: howto manager. (line 448) -* BFD_RELOC_FRV_FUNCDESC_GOT12: howto manager. (line 449) -* BFD_RELOC_FRV_FUNCDESC_GOTHI: howto manager. (line 450) -* BFD_RELOC_FRV_FUNCDESC_GOTLO: howto manager. (line 451) -* BFD_RELOC_FRV_FUNCDESC_GOTOFF12: howto manager. (line 453) -* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI: howto manager. (line 454) -* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO: howto manager. (line 455) -* BFD_RELOC_FRV_FUNCDESC_VALUE: howto manager. (line 452) -* BFD_RELOC_FRV_GETTLSOFF: howto manager. (line 459) -* BFD_RELOC_FRV_GETTLSOFF_RELAX: howto manager. (line 472) -* BFD_RELOC_FRV_GOT12: howto manager. (line 445) -* BFD_RELOC_FRV_GOTHI: howto manager. (line 446) -* BFD_RELOC_FRV_GOTLO: howto manager. (line 447) -* BFD_RELOC_FRV_GOTOFF12: howto manager. (line 456) -* BFD_RELOC_FRV_GOTOFFHI: howto manager. (line 457) -* BFD_RELOC_FRV_GOTOFFLO: howto manager. (line 458) -* BFD_RELOC_FRV_GOTTLSDESC12: howto manager. (line 461) -* BFD_RELOC_FRV_GOTTLSDESCHI: howto manager. (line 462) -* BFD_RELOC_FRV_GOTTLSDESCLO: howto manager. (line 463) -* BFD_RELOC_FRV_GOTTLSOFF12: howto manager. (line 467) -* BFD_RELOC_FRV_GOTTLSOFFHI: howto manager. (line 468) -* BFD_RELOC_FRV_GOTTLSOFFLO: howto manager. (line 469) -* BFD_RELOC_FRV_GPREL12: howto manager. (line 440) -* BFD_RELOC_FRV_GPREL32: howto manager. (line 442) -* BFD_RELOC_FRV_GPRELHI: howto manager. (line 443) -* BFD_RELOC_FRV_GPRELLO: howto manager. (line 444) -* BFD_RELOC_FRV_GPRELU12: howto manager. (line 441) -* BFD_RELOC_FRV_HI16: howto manager. (line 439) -* BFD_RELOC_FRV_LABEL16: howto manager. (line 436) -* BFD_RELOC_FRV_LABEL24: howto manager. (line 437) -* BFD_RELOC_FRV_LO16: howto manager. (line 438) -* BFD_RELOC_FRV_TLSDESC_RELAX: howto manager. (line 471) -* BFD_RELOC_FRV_TLSDESC_VALUE: howto manager. (line 460) -* BFD_RELOC_FRV_TLSMOFF: howto manager. (line 474) -* BFD_RELOC_FRV_TLSMOFF12: howto manager. (line 464) -* BFD_RELOC_FRV_TLSMOFFHI: howto manager. (line 465) -* BFD_RELOC_FRV_TLSMOFFLO: howto manager. (line 466) -* BFD_RELOC_FRV_TLSOFF: howto manager. (line 470) -* BFD_RELOC_FRV_TLSOFF_RELAX: howto manager. (line 473) -* BFD_RELOC_FT32_10: howto manager. (line 431) -* BFD_RELOC_FT32_17: howto manager. (line 433) -* BFD_RELOC_FT32_18: howto manager. (line 434) -* BFD_RELOC_FT32_20: howto manager. (line 432) +* BFD_RELOC_CR16_ABS20: howto manager. (line 2191) +* BFD_RELOC_CR16_ABS24: howto manager. (line 2192) +* BFD_RELOC_CR16_DISP16: howto manager. (line 2202) +* BFD_RELOC_CR16_DISP20: howto manager. (line 2203) +* BFD_RELOC_CR16_DISP24: howto manager. (line 2204) +* BFD_RELOC_CR16_DISP24a: howto manager. (line 2205) +* BFD_RELOC_CR16_DISP4: howto manager. (line 2200) +* BFD_RELOC_CR16_DISP8: howto manager. (line 2201) +* BFD_RELOC_CR16_GLOB_DAT: howto manager. (line 2211) +* BFD_RELOC_CR16_GOTC_REGREL20: howto manager. (line 2210) +* BFD_RELOC_CR16_GOT_REGREL20: howto manager. (line 2209) +* BFD_RELOC_CR16_IMM16: howto manager. (line 2195) +* BFD_RELOC_CR16_IMM20: howto manager. (line 2196) +* BFD_RELOC_CR16_IMM24: howto manager. (line 2197) +* BFD_RELOC_CR16_IMM32: howto manager. (line 2198) +* BFD_RELOC_CR16_IMM32a: howto manager. (line 2199) +* BFD_RELOC_CR16_IMM4: howto manager. (line 2193) +* BFD_RELOC_CR16_IMM8: howto manager. (line 2194) +* BFD_RELOC_CR16_NUM16: howto manager. (line 2180) +* BFD_RELOC_CR16_NUM32: howto manager. (line 2181) +* BFD_RELOC_CR16_NUM32a: howto manager. (line 2182) +* BFD_RELOC_CR16_NUM8: howto manager. (line 2179) +* BFD_RELOC_CR16_REGREL0: howto manager. (line 2183) +* BFD_RELOC_CR16_REGREL14: howto manager. (line 2186) +* BFD_RELOC_CR16_REGREL14a: howto manager. (line 2187) +* BFD_RELOC_CR16_REGREL16: howto manager. (line 2188) +* BFD_RELOC_CR16_REGREL20: howto manager. (line 2189) +* BFD_RELOC_CR16_REGREL20a: howto manager. (line 2190) +* BFD_RELOC_CR16_REGREL4: howto manager. (line 2184) +* BFD_RELOC_CR16_REGREL4a: howto manager. (line 2185) +* BFD_RELOC_CR16_SWITCH16: howto manager. (line 2207) +* BFD_RELOC_CR16_SWITCH32: howto manager. (line 2208) +* BFD_RELOC_CR16_SWITCH8: howto manager. (line 2206) +* BFD_RELOC_CRIS_16_DTPREL: howto manager. (line 2271) +* BFD_RELOC_CRIS_16_GOT: howto manager. (line 2253) +* BFD_RELOC_CRIS_16_GOTPLT: howto manager. (line 2257) +* BFD_RELOC_CRIS_16_GOT_GD: howto manager. (line 2267) +* BFD_RELOC_CRIS_16_GOT_TPREL: howto manager. (line 2273) +* BFD_RELOC_CRIS_16_TPREL: howto manager. (line 2275) +* BFD_RELOC_CRIS_32_DTPREL: howto manager. (line 2270) +* BFD_RELOC_CRIS_32_GD: howto manager. (line 2268) +* BFD_RELOC_CRIS_32_GOT: howto manager. (line 2251) +* BFD_RELOC_CRIS_32_GOTPLT: howto manager. (line 2255) +* BFD_RELOC_CRIS_32_GOTREL: howto manager. (line 2259) +* BFD_RELOC_CRIS_32_GOT_GD: howto manager. (line 2266) +* BFD_RELOC_CRIS_32_GOT_TPREL: howto manager. (line 2272) +* BFD_RELOC_CRIS_32_IE: howto manager. (line 2277) +* BFD_RELOC_CRIS_32_PLT_GOTREL: howto manager. (line 2261) +* BFD_RELOC_CRIS_32_PLT_PCREL: howto manager. (line 2263) +* BFD_RELOC_CRIS_32_TPREL: howto manager. (line 2274) +* BFD_RELOC_CRIS_BDISP8: howto manager. (line 2234) +* BFD_RELOC_CRIS_COPY: howto manager. (line 2246) +* BFD_RELOC_CRIS_DTP: howto manager. (line 2269) +* BFD_RELOC_CRIS_DTPMOD: howto manager. (line 2276) +* BFD_RELOC_CRIS_GLOB_DAT: howto manager. (line 2247) +* BFD_RELOC_CRIS_JUMP_SLOT: howto manager. (line 2248) +* BFD_RELOC_CRIS_LAPCQ_OFFSET: howto manager. (line 2242) +* BFD_RELOC_CRIS_RELATIVE: howto manager. (line 2249) +* BFD_RELOC_CRIS_SIGNED_16: howto manager. (line 2240) +* BFD_RELOC_CRIS_SIGNED_6: howto manager. (line 2236) +* BFD_RELOC_CRIS_SIGNED_8: howto manager. (line 2238) +* BFD_RELOC_CRIS_UNSIGNED_16: howto manager. (line 2241) +* BFD_RELOC_CRIS_UNSIGNED_4: howto manager. (line 2243) +* BFD_RELOC_CRIS_UNSIGNED_5: howto manager. (line 2235) +* BFD_RELOC_CRIS_UNSIGNED_6: howto manager. (line 2237) +* BFD_RELOC_CRIS_UNSIGNED_8: howto manager. (line 2239) +* BFD_RELOC_CRX_ABS16: howto manager. (line 2223) +* BFD_RELOC_CRX_ABS32: howto manager. (line 2224) +* BFD_RELOC_CRX_IMM16: howto manager. (line 2228) +* BFD_RELOC_CRX_IMM32: howto manager. (line 2229) +* BFD_RELOC_CRX_NUM16: howto manager. (line 2226) +* BFD_RELOC_CRX_NUM32: howto manager. (line 2227) +* BFD_RELOC_CRX_NUM8: howto manager. (line 2225) +* BFD_RELOC_CRX_REGREL12: howto manager. (line 2219) +* BFD_RELOC_CRX_REGREL22: howto manager. (line 2220) +* BFD_RELOC_CRX_REGREL28: howto manager. (line 2221) +* BFD_RELOC_CRX_REGREL32: howto manager. (line 2222) +* BFD_RELOC_CRX_REL16: howto manager. (line 2216) +* BFD_RELOC_CRX_REL24: howto manager. (line 2217) +* BFD_RELOC_CRX_REL32: howto manager. (line 2218) +* BFD_RELOC_CRX_REL4: howto manager. (line 2213) +* BFD_RELOC_CRX_REL8: howto manager. (line 2214) +* BFD_RELOC_CRX_REL8_CMP: howto manager. (line 2215) +* BFD_RELOC_CRX_SWITCH16: howto manager. (line 2231) +* BFD_RELOC_CRX_SWITCH32: howto manager. (line 2232) +* BFD_RELOC_CRX_SWITCH8: howto manager. (line 2230) +* BFD_RELOC_CTOR: howto manager. (line 726) +* BFD_RELOC_D10V_10_PCREL_L: howto manager. (line 1127) +* BFD_RELOC_D10V_10_PCREL_R: howto manager. (line 1124) +* BFD_RELOC_D10V_18: howto manager. (line 1131) +* BFD_RELOC_D10V_18_PCREL: howto manager. (line 1133) +* BFD_RELOC_D30V_15: howto manager. (line 1144) +* BFD_RELOC_D30V_15_PCREL: howto manager. (line 1147) +* BFD_RELOC_D30V_15_PCREL_R: howto manager. (line 1150) +* BFD_RELOC_D30V_21: howto manager. (line 1154) +* BFD_RELOC_D30V_21_PCREL: howto manager. (line 1157) +* BFD_RELOC_D30V_21_PCREL_R: howto manager. (line 1160) +* BFD_RELOC_D30V_32: howto manager. (line 1164) +* BFD_RELOC_D30V_32_PCREL: howto manager. (line 1166) +* BFD_RELOC_D30V_6: howto manager. (line 1135) +* BFD_RELOC_D30V_9_PCREL: howto manager. (line 1137) +* BFD_RELOC_D30V_9_PCREL_R: howto manager. (line 1140) +* BFD_RELOC_DLX_HI16_S: howto manager. (line 1168) +* BFD_RELOC_DLX_JMP26: howto manager. (line 1172) +* BFD_RELOC_DLX_LO16: howto manager. (line 1170) +* BFD_RELOC_EPIPHANY_HIGH: howto manager. (line 3142) +* BFD_RELOC_EPIPHANY_IMM11: howto manager. (line 3148) +* BFD_RELOC_EPIPHANY_IMM8: howto manager. (line 3151) +* BFD_RELOC_EPIPHANY_LOW: howto manager. (line 3144) +* BFD_RELOC_EPIPHANY_SIMM11: howto manager. (line 3146) +* BFD_RELOC_EPIPHANY_SIMM24: howto manager. (line 3140) +* BFD_RELOC_EPIPHANY_SIMM8: howto manager. (line 3138) +* BFD_RELOC_FR30_10_IN_8: howto manager. (line 1542) +* BFD_RELOC_FR30_12_PCREL: howto manager. (line 1548) +* BFD_RELOC_FR30_20: howto manager. (line 1530) +* BFD_RELOC_FR30_48: howto manager. (line 1528) +* BFD_RELOC_FR30_6_IN_4: howto manager. (line 1533) +* BFD_RELOC_FR30_8_IN_8: howto manager. (line 1536) +* BFD_RELOC_FR30_9_IN_8: howto manager. (line 1539) +* BFD_RELOC_FR30_9_PCREL: howto manager. (line 1545) +* BFD_RELOC_FRV_FUNCDESC: howto manager. (line 450) +* BFD_RELOC_FRV_FUNCDESC_GOT12: howto manager. (line 451) +* BFD_RELOC_FRV_FUNCDESC_GOTHI: howto manager. (line 452) +* BFD_RELOC_FRV_FUNCDESC_GOTLO: howto manager. (line 453) +* BFD_RELOC_FRV_FUNCDESC_GOTOFF12: howto manager. (line 455) +* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI: howto manager. (line 456) +* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO: howto manager. (line 457) +* BFD_RELOC_FRV_FUNCDESC_VALUE: howto manager. (line 454) +* BFD_RELOC_FRV_GETTLSOFF: howto manager. (line 461) +* BFD_RELOC_FRV_GETTLSOFF_RELAX: howto manager. (line 474) +* BFD_RELOC_FRV_GOT12: howto manager. (line 447) +* BFD_RELOC_FRV_GOTHI: howto manager. (line 448) +* BFD_RELOC_FRV_GOTLO: howto manager. (line 449) +* BFD_RELOC_FRV_GOTOFF12: howto manager. (line 458) +* BFD_RELOC_FRV_GOTOFFHI: howto manager. (line 459) +* BFD_RELOC_FRV_GOTOFFLO: howto manager. (line 460) +* BFD_RELOC_FRV_GOTTLSDESC12: howto manager. (line 463) +* BFD_RELOC_FRV_GOTTLSDESCHI: howto manager. (line 464) +* BFD_RELOC_FRV_GOTTLSDESCLO: howto manager. (line 465) +* BFD_RELOC_FRV_GOTTLSOFF12: howto manager. (line 469) +* BFD_RELOC_FRV_GOTTLSOFFHI: howto manager. (line 470) +* BFD_RELOC_FRV_GOTTLSOFFLO: howto manager. (line 471) +* BFD_RELOC_FRV_GPREL12: howto manager. (line 442) +* BFD_RELOC_FRV_GPREL32: howto manager. (line 444) +* BFD_RELOC_FRV_GPRELHI: howto manager. (line 445) +* BFD_RELOC_FRV_GPRELLO: howto manager. (line 446) +* BFD_RELOC_FRV_GPRELU12: howto manager. (line 443) +* BFD_RELOC_FRV_HI16: howto manager. (line 441) +* BFD_RELOC_FRV_LABEL16: howto manager. (line 438) +* BFD_RELOC_FRV_LABEL24: howto manager. (line 439) +* BFD_RELOC_FRV_LO16: howto manager. (line 440) +* BFD_RELOC_FRV_TLSDESC_RELAX: howto manager. (line 473) +* BFD_RELOC_FRV_TLSDESC_VALUE: howto manager. (line 462) +* BFD_RELOC_FRV_TLSMOFF: howto manager. (line 476) +* BFD_RELOC_FRV_TLSMOFF12: howto manager. (line 466) +* BFD_RELOC_FRV_TLSMOFFHI: howto manager. (line 467) +* BFD_RELOC_FRV_TLSMOFFLO: howto manager. (line 468) +* BFD_RELOC_FRV_TLSOFF: howto manager. (line 472) +* BFD_RELOC_FRV_TLSOFF_RELAX: howto manager. (line 475) +* BFD_RELOC_FT32_10: howto manager. (line 433) +* BFD_RELOC_FT32_17: howto manager. (line 435) +* BFD_RELOC_FT32_18: howto manager. (line 436) +* BFD_RELOC_FT32_20: howto manager. (line 434) * BFD_RELOC_GPREL16: howto manager. (line 114) * BFD_RELOC_GPREL32: howto manager. (line 115) -* BFD_RELOC_H8_DIR16A8: howto manager. (line 2334) -* BFD_RELOC_H8_DIR16R8: howto manager. (line 2335) -* BFD_RELOC_H8_DIR24A8: howto manager. (line 2336) -* BFD_RELOC_H8_DIR24R8: howto manager. (line 2337) -* BFD_RELOC_H8_DIR32A16: howto manager. (line 2338) -* BFD_RELOC_H8_DISP32A16: howto manager. (line 2339) +* BFD_RELOC_H8_DIR16A8: howto manager. (line 2337) +* BFD_RELOC_H8_DIR16R8: howto manager. (line 2338) +* BFD_RELOC_H8_DIR24A8: howto manager. (line 2339) +* BFD_RELOC_H8_DIR24R8: howto manager. (line 2340) +* BFD_RELOC_H8_DIR32A16: howto manager. (line 2341) +* BFD_RELOC_H8_DISP32A16: howto manager. (line 2342) * BFD_RELOC_HI16: howto manager. (line 316) * BFD_RELOC_HI16_BASEREL: howto manager. (line 94) * BFD_RELOC_HI16_GOTOFF: howto manager. (line 53) @@ -12145,291 +12206,292 @@ BFD Index * BFD_RELOC_HI16_S_PCREL: howto manager. (line 327) * BFD_RELOC_HI16_S_PLTOFF: howto manager. (line 66) * BFD_RELOC_HI22: howto manager. (line 110) -* BFD_RELOC_I370_D12: howto manager. (line 722) +* BFD_RELOC_I370_D12: howto manager. (line 724) * BFD_RELOC_I960_CALLJ: howto manager. (line 120) -* BFD_RELOC_IA64_COPY: howto manager. (line 2037) -* BFD_RELOC_IA64_DIR32LSB: howto manager. (line 1982) -* BFD_RELOC_IA64_DIR32MSB: howto manager. (line 1981) -* BFD_RELOC_IA64_DIR64LSB: howto manager. (line 1984) -* BFD_RELOC_IA64_DIR64MSB: howto manager. (line 1983) -* BFD_RELOC_IA64_DTPMOD64LSB: howto manager. (line 2047) -* BFD_RELOC_IA64_DTPMOD64MSB: howto manager. (line 2046) -* BFD_RELOC_IA64_DTPREL14: howto manager. (line 2049) -* BFD_RELOC_IA64_DTPREL22: howto manager. (line 2050) -* BFD_RELOC_IA64_DTPREL32LSB: howto manager. (line 2053) -* BFD_RELOC_IA64_DTPREL32MSB: howto manager. (line 2052) -* BFD_RELOC_IA64_DTPREL64I: howto manager. (line 2051) -* BFD_RELOC_IA64_DTPREL64LSB: howto manager. (line 2055) -* BFD_RELOC_IA64_DTPREL64MSB: howto manager. (line 2054) -* BFD_RELOC_IA64_FPTR32LSB: howto manager. (line 1999) -* BFD_RELOC_IA64_FPTR32MSB: howto manager. (line 1998) -* BFD_RELOC_IA64_FPTR64I: howto manager. (line 1997) -* BFD_RELOC_IA64_FPTR64LSB: howto manager. (line 2001) -* BFD_RELOC_IA64_FPTR64MSB: howto manager. (line 2000) -* BFD_RELOC_IA64_GPREL22: howto manager. (line 1985) -* BFD_RELOC_IA64_GPREL32LSB: howto manager. (line 1988) -* BFD_RELOC_IA64_GPREL32MSB: howto manager. (line 1987) -* BFD_RELOC_IA64_GPREL64I: howto manager. (line 1986) -* BFD_RELOC_IA64_GPREL64LSB: howto manager. (line 1990) -* BFD_RELOC_IA64_GPREL64MSB: howto manager. (line 1989) -* BFD_RELOC_IA64_IMM14: howto manager. (line 1978) -* BFD_RELOC_IA64_IMM22: howto manager. (line 1979) -* BFD_RELOC_IA64_IMM64: howto manager. (line 1980) -* BFD_RELOC_IA64_IPLTLSB: howto manager. (line 2036) -* BFD_RELOC_IA64_IPLTMSB: howto manager. (line 2035) -* BFD_RELOC_IA64_LDXMOV: howto manager. (line 2039) -* BFD_RELOC_IA64_LTOFF22: howto manager. (line 1991) -* BFD_RELOC_IA64_LTOFF22X: howto manager. (line 2038) -* BFD_RELOC_IA64_LTOFF64I: howto manager. (line 1992) -* BFD_RELOC_IA64_LTOFF_DTPMOD22: howto manager. (line 2048) -* BFD_RELOC_IA64_LTOFF_DTPREL22: howto manager. (line 2056) -* BFD_RELOC_IA64_LTOFF_FPTR22: howto manager. (line 2013) -* BFD_RELOC_IA64_LTOFF_FPTR32LSB: howto manager. (line 2016) -* BFD_RELOC_IA64_LTOFF_FPTR32MSB: howto manager. (line 2015) -* BFD_RELOC_IA64_LTOFF_FPTR64I: howto manager. (line 2014) -* BFD_RELOC_IA64_LTOFF_FPTR64LSB: howto manager. (line 2018) -* BFD_RELOC_IA64_LTOFF_FPTR64MSB: howto manager. (line 2017) -* BFD_RELOC_IA64_LTOFF_TPREL22: howto manager. (line 2045) -* BFD_RELOC_IA64_LTV32LSB: howto manager. (line 2032) -* BFD_RELOC_IA64_LTV32MSB: howto manager. (line 2031) -* BFD_RELOC_IA64_LTV64LSB: howto manager. (line 2034) -* BFD_RELOC_IA64_LTV64MSB: howto manager. (line 2033) -* BFD_RELOC_IA64_PCREL21B: howto manager. (line 2002) -* BFD_RELOC_IA64_PCREL21BI: howto manager. (line 2003) -* BFD_RELOC_IA64_PCREL21F: howto manager. (line 2005) -* BFD_RELOC_IA64_PCREL21M: howto manager. (line 2004) -* BFD_RELOC_IA64_PCREL22: howto manager. (line 2006) -* BFD_RELOC_IA64_PCREL32LSB: howto manager. (line 2010) -* BFD_RELOC_IA64_PCREL32MSB: howto manager. (line 2009) -* BFD_RELOC_IA64_PCREL60B: howto manager. (line 2007) -* BFD_RELOC_IA64_PCREL64I: howto manager. (line 2008) -* BFD_RELOC_IA64_PCREL64LSB: howto manager. (line 2012) -* BFD_RELOC_IA64_PCREL64MSB: howto manager. (line 2011) -* BFD_RELOC_IA64_PLTOFF22: howto manager. (line 1993) -* BFD_RELOC_IA64_PLTOFF64I: howto manager. (line 1994) -* BFD_RELOC_IA64_PLTOFF64LSB: howto manager. (line 1996) -* BFD_RELOC_IA64_PLTOFF64MSB: howto manager. (line 1995) -* BFD_RELOC_IA64_REL32LSB: howto manager. (line 2028) -* BFD_RELOC_IA64_REL32MSB: howto manager. (line 2027) -* BFD_RELOC_IA64_REL64LSB: howto manager. (line 2030) -* BFD_RELOC_IA64_REL64MSB: howto manager. (line 2029) -* BFD_RELOC_IA64_SECREL32LSB: howto manager. (line 2024) -* BFD_RELOC_IA64_SECREL32MSB: howto manager. (line 2023) -* BFD_RELOC_IA64_SECREL64LSB: howto manager. (line 2026) -* BFD_RELOC_IA64_SECREL64MSB: howto manager. (line 2025) -* BFD_RELOC_IA64_SEGREL32LSB: howto manager. (line 2020) -* BFD_RELOC_IA64_SEGREL32MSB: howto manager. (line 2019) -* BFD_RELOC_IA64_SEGREL64LSB: howto manager. (line 2022) -* BFD_RELOC_IA64_SEGREL64MSB: howto manager. (line 2021) -* BFD_RELOC_IA64_TPREL14: howto manager. (line 2040) -* BFD_RELOC_IA64_TPREL22: howto manager. (line 2041) -* BFD_RELOC_IA64_TPREL64I: howto manager. (line 2042) -* BFD_RELOC_IA64_TPREL64LSB: howto manager. (line 2044) -* BFD_RELOC_IA64_TPREL64MSB: howto manager. (line 2043) -* BFD_RELOC_IP2K_ADDR16CJP: howto manager. (line 1939) -* BFD_RELOC_IP2K_BANK: howto manager. (line 1937) -* BFD_RELOC_IP2K_EX8DATA: howto manager. (line 1945) -* BFD_RELOC_IP2K_FR9: howto manager. (line 1935) -* BFD_RELOC_IP2K_FR_OFFSET: howto manager. (line 1954) -* BFD_RELOC_IP2K_HI8DATA: howto manager. (line 1944) -* BFD_RELOC_IP2K_HI8INSN: howto manager. (line 1948) -* BFD_RELOC_IP2K_LO8DATA: howto manager. (line 1943) -* BFD_RELOC_IP2K_LO8INSN: howto manager. (line 1947) -* BFD_RELOC_IP2K_PAGE3: howto manager. (line 1941) -* BFD_RELOC_IP2K_PC_SKIP: howto manager. (line 1950) -* BFD_RELOC_IP2K_TEXT: howto manager. (line 1952) -* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 2445) -* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 2446) -* BFD_RELOC_IQ2000_UHI16: howto manager. (line 2447) -* BFD_RELOC_LM32_16_GOT: howto manager. (line 2537) -* BFD_RELOC_LM32_BRANCH: howto manager. (line 2536) -* BFD_RELOC_LM32_CALL: howto manager. (line 2535) -* BFD_RELOC_LM32_COPY: howto manager. (line 2540) -* BFD_RELOC_LM32_GLOB_DAT: howto manager. (line 2541) -* BFD_RELOC_LM32_GOTOFF_HI16: howto manager. (line 2538) -* BFD_RELOC_LM32_GOTOFF_LO16: howto manager. (line 2539) -* BFD_RELOC_LM32_JMP_SLOT: howto manager. (line 2542) -* BFD_RELOC_LM32_RELATIVE: howto manager. (line 2543) +* BFD_RELOC_IA64_COPY: howto manager. (line 2040) +* BFD_RELOC_IA64_DIR32LSB: howto manager. (line 1985) +* BFD_RELOC_IA64_DIR32MSB: howto manager. (line 1984) +* BFD_RELOC_IA64_DIR64LSB: howto manager. (line 1987) +* BFD_RELOC_IA64_DIR64MSB: howto manager. (line 1986) +* BFD_RELOC_IA64_DTPMOD64LSB: howto manager. (line 2050) +* BFD_RELOC_IA64_DTPMOD64MSB: howto manager. (line 2049) +* BFD_RELOC_IA64_DTPREL14: howto manager. (line 2052) +* BFD_RELOC_IA64_DTPREL22: howto manager. (line 2053) +* BFD_RELOC_IA64_DTPREL32LSB: howto manager. (line 2056) +* BFD_RELOC_IA64_DTPREL32MSB: howto manager. (line 2055) +* BFD_RELOC_IA64_DTPREL64I: howto manager. (line 2054) +* BFD_RELOC_IA64_DTPREL64LSB: howto manager. (line 2058) +* BFD_RELOC_IA64_DTPREL64MSB: howto manager. (line 2057) +* BFD_RELOC_IA64_FPTR32LSB: howto manager. (line 2002) +* BFD_RELOC_IA64_FPTR32MSB: howto manager. (line 2001) +* BFD_RELOC_IA64_FPTR64I: howto manager. (line 2000) +* BFD_RELOC_IA64_FPTR64LSB: howto manager. (line 2004) +* BFD_RELOC_IA64_FPTR64MSB: howto manager. (line 2003) +* BFD_RELOC_IA64_GPREL22: howto manager. (line 1988) +* BFD_RELOC_IA64_GPREL32LSB: howto manager. (line 1991) +* BFD_RELOC_IA64_GPREL32MSB: howto manager. (line 1990) +* BFD_RELOC_IA64_GPREL64I: howto manager. (line 1989) +* BFD_RELOC_IA64_GPREL64LSB: howto manager. (line 1993) +* BFD_RELOC_IA64_GPREL64MSB: howto manager. (line 1992) +* BFD_RELOC_IA64_IMM14: howto manager. (line 1981) +* BFD_RELOC_IA64_IMM22: howto manager. (line 1982) +* BFD_RELOC_IA64_IMM64: howto manager. (line 1983) +* BFD_RELOC_IA64_IPLTLSB: howto manager. (line 2039) +* BFD_RELOC_IA64_IPLTMSB: howto manager. (line 2038) +* BFD_RELOC_IA64_LDXMOV: howto manager. (line 2042) +* BFD_RELOC_IA64_LTOFF22: howto manager. (line 1994) +* BFD_RELOC_IA64_LTOFF22X: howto manager. (line 2041) +* BFD_RELOC_IA64_LTOFF64I: howto manager. (line 1995) +* BFD_RELOC_IA64_LTOFF_DTPMOD22: howto manager. (line 2051) +* BFD_RELOC_IA64_LTOFF_DTPREL22: howto manager. (line 2059) +* BFD_RELOC_IA64_LTOFF_FPTR22: howto manager. (line 2016) +* BFD_RELOC_IA64_LTOFF_FPTR32LSB: howto manager. (line 2019) +* BFD_RELOC_IA64_LTOFF_FPTR32MSB: howto manager. (line 2018) +* BFD_RELOC_IA64_LTOFF_FPTR64I: howto manager. (line 2017) +* BFD_RELOC_IA64_LTOFF_FPTR64LSB: howto manager. (line 2021) +* BFD_RELOC_IA64_LTOFF_FPTR64MSB: howto manager. (line 2020) +* BFD_RELOC_IA64_LTOFF_TPREL22: howto manager. (line 2048) +* BFD_RELOC_IA64_LTV32LSB: howto manager. (line 2035) +* BFD_RELOC_IA64_LTV32MSB: howto manager. (line 2034) +* BFD_RELOC_IA64_LTV64LSB: howto manager. (line 2037) +* BFD_RELOC_IA64_LTV64MSB: howto manager. (line 2036) +* BFD_RELOC_IA64_PCREL21B: howto manager. (line 2005) +* BFD_RELOC_IA64_PCREL21BI: howto manager. (line 2006) +* BFD_RELOC_IA64_PCREL21F: howto manager. (line 2008) +* BFD_RELOC_IA64_PCREL21M: howto manager. (line 2007) +* BFD_RELOC_IA64_PCREL22: howto manager. (line 2009) +* BFD_RELOC_IA64_PCREL32LSB: howto manager. (line 2013) +* BFD_RELOC_IA64_PCREL32MSB: howto manager. (line 2012) +* BFD_RELOC_IA64_PCREL60B: howto manager. (line 2010) +* BFD_RELOC_IA64_PCREL64I: howto manager. (line 2011) +* BFD_RELOC_IA64_PCREL64LSB: howto manager. (line 2015) +* BFD_RELOC_IA64_PCREL64MSB: howto manager. (line 2014) +* BFD_RELOC_IA64_PLTOFF22: howto manager. (line 1996) +* BFD_RELOC_IA64_PLTOFF64I: howto manager. (line 1997) +* BFD_RELOC_IA64_PLTOFF64LSB: howto manager. (line 1999) +* BFD_RELOC_IA64_PLTOFF64MSB: howto manager. (line 1998) +* BFD_RELOC_IA64_REL32LSB: howto manager. (line 2031) +* BFD_RELOC_IA64_REL32MSB: howto manager. (line 2030) +* BFD_RELOC_IA64_REL64LSB: howto manager. (line 2033) +* BFD_RELOC_IA64_REL64MSB: howto manager. (line 2032) +* BFD_RELOC_IA64_SECREL32LSB: howto manager. (line 2027) +* BFD_RELOC_IA64_SECREL32MSB: howto manager. (line 2026) +* BFD_RELOC_IA64_SECREL64LSB: howto manager. (line 2029) +* BFD_RELOC_IA64_SECREL64MSB: howto manager. (line 2028) +* BFD_RELOC_IA64_SEGREL32LSB: howto manager. (line 2023) +* BFD_RELOC_IA64_SEGREL32MSB: howto manager. (line 2022) +* BFD_RELOC_IA64_SEGREL64LSB: howto manager. (line 2025) +* BFD_RELOC_IA64_SEGREL64MSB: howto manager. (line 2024) +* BFD_RELOC_IA64_TPREL14: howto manager. (line 2043) +* BFD_RELOC_IA64_TPREL22: howto manager. (line 2044) +* BFD_RELOC_IA64_TPREL64I: howto manager. (line 2045) +* BFD_RELOC_IA64_TPREL64LSB: howto manager. (line 2047) +* BFD_RELOC_IA64_TPREL64MSB: howto manager. (line 2046) +* BFD_RELOC_IP2K_ADDR16CJP: howto manager. (line 1942) +* BFD_RELOC_IP2K_BANK: howto manager. (line 1940) +* BFD_RELOC_IP2K_EX8DATA: howto manager. (line 1948) +* BFD_RELOC_IP2K_FR9: howto manager. (line 1938) +* BFD_RELOC_IP2K_FR_OFFSET: howto manager. (line 1957) +* BFD_RELOC_IP2K_HI8DATA: howto manager. (line 1947) +* BFD_RELOC_IP2K_HI8INSN: howto manager. (line 1951) +* BFD_RELOC_IP2K_LO8DATA: howto manager. (line 1946) +* BFD_RELOC_IP2K_LO8INSN: howto manager. (line 1950) +* BFD_RELOC_IP2K_PAGE3: howto manager. (line 1944) +* BFD_RELOC_IP2K_PC_SKIP: howto manager. (line 1953) +* BFD_RELOC_IP2K_TEXT: howto manager. (line 1955) +* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 2448) +* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 2449) +* BFD_RELOC_IQ2000_UHI16: howto manager. (line 2450) +* BFD_RELOC_LM32_16_GOT: howto manager. (line 2540) +* BFD_RELOC_LM32_BRANCH: howto manager. (line 2539) +* BFD_RELOC_LM32_CALL: howto manager. (line 2538) +* BFD_RELOC_LM32_COPY: howto manager. (line 2543) +* BFD_RELOC_LM32_GLOB_DAT: howto manager. (line 2544) +* BFD_RELOC_LM32_GOTOFF_HI16: howto manager. (line 2541) +* BFD_RELOC_LM32_GOTOFF_LO16: howto manager. (line 2542) +* BFD_RELOC_LM32_JMP_SLOT: howto manager. (line 2545) +* BFD_RELOC_LM32_RELATIVE: howto manager. (line 2546) * BFD_RELOC_LO10: howto manager. (line 111) * BFD_RELOC_LO16: howto manager. (line 323) * BFD_RELOC_LO16_BASEREL: howto manager. (line 93) * BFD_RELOC_LO16_GOTOFF: howto manager. (line 52) * BFD_RELOC_LO16_PCREL: howto manager. (line 329) * BFD_RELOC_LO16_PLTOFF: howto manager. (line 64) -* BFD_RELOC_M32C_HI8: howto manager. (line 1171) -* BFD_RELOC_M32C_RL_1ADDR: howto manager. (line 1173) -* BFD_RELOC_M32C_RL_2ADDR: howto manager. (line 1174) -* BFD_RELOC_M32C_RL_JUMP: howto manager. (line 1172) -* BFD_RELOC_M32R_10_PCREL: howto manager. (line 1179) -* BFD_RELOC_M32R_18_PCREL: howto manager. (line 1182) -* BFD_RELOC_M32R_24: howto manager. (line 1176) -* BFD_RELOC_M32R_26_PCREL: howto manager. (line 1184) -* BFD_RELOC_M32R_26_PLTREL: howto manager. (line 1198) -* BFD_RELOC_M32R_COPY: howto manager. (line 1199) -* BFD_RELOC_M32R_GLOB_DAT: howto manager. (line 1200) -* BFD_RELOC_M32R_GOT16_HI_SLO: howto manager. (line 1209) -* BFD_RELOC_M32R_GOT16_HI_ULO: howto manager. (line 1208) -* BFD_RELOC_M32R_GOT16_LO: howto manager. (line 1210) -* BFD_RELOC_M32R_GOT24: howto manager. (line 1197) -* BFD_RELOC_M32R_GOTOFF: howto manager. (line 1203) -* BFD_RELOC_M32R_GOTOFF_HI_SLO: howto manager. (line 1205) -* BFD_RELOC_M32R_GOTOFF_HI_ULO: howto manager. (line 1204) -* BFD_RELOC_M32R_GOTOFF_LO: howto manager. (line 1206) -* BFD_RELOC_M32R_GOTPC24: howto manager. (line 1207) -* BFD_RELOC_M32R_GOTPC_HI_SLO: howto manager. (line 1212) -* BFD_RELOC_M32R_GOTPC_HI_ULO: howto manager. (line 1211) -* BFD_RELOC_M32R_GOTPC_LO: howto manager. (line 1213) -* BFD_RELOC_M32R_HI16_SLO: howto manager. (line 1189) -* BFD_RELOC_M32R_HI16_ULO: howto manager. (line 1186) -* BFD_RELOC_M32R_JMP_SLOT: howto manager. (line 1201) -* BFD_RELOC_M32R_LO16: howto manager. (line 1192) -* BFD_RELOC_M32R_RELATIVE: howto manager. (line 1202) -* BFD_RELOC_M32R_SDA16: howto manager. (line 1194) -* BFD_RELOC_M68HC11_24: howto manager. (line 2084) -* BFD_RELOC_M68HC11_3B: howto manager. (line 2064) -* BFD_RELOC_M68HC11_HI8: howto manager. (line 2058) -* BFD_RELOC_M68HC11_LO16: howto manager. (line 2075) -* BFD_RELOC_M68HC11_LO8: howto manager. (line 2061) -* BFD_RELOC_M68HC11_PAGE: howto manager. (line 2080) -* BFD_RELOC_M68HC11_RL_GROUP: howto manager. (line 2071) -* BFD_RELOC_M68HC11_RL_JUMP: howto manager. (line 2066) -* BFD_RELOC_M68HC12_10_PCREL: howto manager. (line 2127) -* BFD_RELOC_M68HC12_16B: howto manager. (line 2123) -* BFD_RELOC_M68HC12_5B: howto manager. (line 2089) -* BFD_RELOC_M68HC12_9B: howto manager. (line 2121) -* BFD_RELOC_M68HC12_9_PCREL: howto manager. (line 2125) -* BFD_RELOC_M68HC12_HI8XG: howto manager. (line 2132) -* BFD_RELOC_M68HC12_LO8XG: howto manager. (line 2129) -* BFD_RELOC_MACH_O_ARM64_ADDEND: howto manager. (line 2571) -* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21: howto manager. (line 2573) -* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12: howto manager. (line 2575) -* BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT: howto manager. (line 2577) -* BFD_RELOC_MACH_O_LOCAL_SECTDIFF: howto manager. (line 2548) -* BFD_RELOC_MACH_O_PAIR: howto manager. (line 2550) -* BFD_RELOC_MACH_O_SECTDIFF: howto manager. (line 2545) -* BFD_RELOC_MACH_O_SUBTRACTOR32: howto manager. (line 2552) -* BFD_RELOC_MACH_O_SUBTRACTOR64: howto manager. (line 2554) -* BFD_RELOC_MACH_O_X86_64_BRANCH32: howto manager. (line 2556) -* BFD_RELOC_MACH_O_X86_64_BRANCH8: howto manager. (line 2557) -* BFD_RELOC_MACH_O_X86_64_GOT: howto manager. (line 2560) -* BFD_RELOC_MACH_O_X86_64_GOT_LOAD: howto manager. (line 2562) -* BFD_RELOC_MACH_O_X86_64_PCREL32_1: howto manager. (line 2565) -* BFD_RELOC_MACH_O_X86_64_PCREL32_2: howto manager. (line 2567) -* BFD_RELOC_MACH_O_X86_64_PCREL32_4: howto manager. (line 2569) -* BFD_RELOC_MCORE_PCREL_32: howto manager. (line 1551) -* BFD_RELOC_MCORE_PCREL_IMM11BY2: howto manager. (line 1549) -* BFD_RELOC_MCORE_PCREL_IMM4BY2: howto manager. (line 1550) -* BFD_RELOC_MCORE_PCREL_IMM8BY4: howto manager. (line 1548) -* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2: howto manager. (line 1552) -* BFD_RELOC_MCORE_RVA: howto manager. (line 1553) -* BFD_RELOC_MEP_16: howto manager. (line 1556) -* BFD_RELOC_MEP_32: howto manager. (line 1557) -* BFD_RELOC_MEP_8: howto manager. (line 1555) -* BFD_RELOC_MEP_ADDR24A4: howto manager. (line 1572) -* BFD_RELOC_MEP_GNU_VTENTRY: howto manager. (line 1574) -* BFD_RELOC_MEP_GNU_VTINHERIT: howto manager. (line 1573) -* BFD_RELOC_MEP_GPREL: howto manager. (line 1566) -* BFD_RELOC_MEP_HI16S: howto manager. (line 1565) -* BFD_RELOC_MEP_HI16U: howto manager. (line 1564) -* BFD_RELOC_MEP_LOW16: howto manager. (line 1563) -* BFD_RELOC_MEP_PCABS24A2: howto manager. (line 1562) -* BFD_RELOC_MEP_PCREL12A2: howto manager. (line 1559) -* BFD_RELOC_MEP_PCREL17A2: howto manager. (line 1560) -* BFD_RELOC_MEP_PCREL24A2: howto manager. (line 1561) -* BFD_RELOC_MEP_PCREL8A2: howto manager. (line 1558) -* BFD_RELOC_MEP_TPREL: howto manager. (line 1567) -* BFD_RELOC_MEP_TPREL7: howto manager. (line 1568) -* BFD_RELOC_MEP_TPREL7A2: howto manager. (line 1569) -* BFD_RELOC_MEP_TPREL7A4: howto manager. (line 1570) -* BFD_RELOC_MEP_UIMM24: howto manager. (line 1571) -* BFD_RELOC_METAG_COPY: howto manager. (line 1595) -* BFD_RELOC_METAG_GETSETOFF: howto manager. (line 1579) -* BFD_RELOC_METAG_GETSET_GOT: howto manager. (line 1587) -* BFD_RELOC_METAG_GETSET_GOTOFF: howto manager. (line 1586) -* BFD_RELOC_METAG_GLOB_DAT: howto manager. (line 1598) -* BFD_RELOC_METAG_GOTOFF: howto manager. (line 1593) -* BFD_RELOC_METAG_HI16_GOTOFF: howto manager. (line 1584) -* BFD_RELOC_METAG_HI16_GOTPC: howto manager. (line 1588) -* BFD_RELOC_METAG_HI16_PLT: howto manager. (line 1590) -* BFD_RELOC_METAG_HIADDR16: howto manager. (line 1576) -* BFD_RELOC_METAG_HIOG: howto manager. (line 1580) -* BFD_RELOC_METAG_JMP_SLOT: howto manager. (line 1596) -* BFD_RELOC_METAG_LO16_GOTOFF: howto manager. (line 1585) -* BFD_RELOC_METAG_LO16_GOTPC: howto manager. (line 1589) -* BFD_RELOC_METAG_LO16_PLT: howto manager. (line 1591) -* BFD_RELOC_METAG_LOADDR16: howto manager. (line 1577) -* BFD_RELOC_METAG_LOOG: howto manager. (line 1581) -* BFD_RELOC_METAG_PLT: howto manager. (line 1594) -* BFD_RELOC_METAG_REL16: howto manager. (line 1583) -* BFD_RELOC_METAG_REL8: howto manager. (line 1582) -* BFD_RELOC_METAG_RELATIVE: howto manager. (line 1597) -* BFD_RELOC_METAG_RELBRANCH: howto manager. (line 1578) -* BFD_RELOC_METAG_RELBRANCH_PLT: howto manager. (line 1592) -* BFD_RELOC_METAG_TLS_DTPMOD: howto manager. (line 1609) -* BFD_RELOC_METAG_TLS_DTPOFF: howto manager. (line 1610) -* BFD_RELOC_METAG_TLS_GD: howto manager. (line 1599) -* BFD_RELOC_METAG_TLS_IE: howto manager. (line 1604) -* BFD_RELOC_METAG_TLS_IENONPIC: howto manager. (line 1605) -* BFD_RELOC_METAG_TLS_IENONPIC_HI16: howto manager. (line 1606) -* BFD_RELOC_METAG_TLS_IENONPIC_LO16: howto manager. (line 1607) -* BFD_RELOC_METAG_TLS_LDM: howto manager. (line 1600) -* BFD_RELOC_METAG_TLS_LDO: howto manager. (line 1603) -* BFD_RELOC_METAG_TLS_LDO_HI16: howto manager. (line 1601) -* BFD_RELOC_METAG_TLS_LDO_LO16: howto manager. (line 1602) -* BFD_RELOC_METAG_TLS_LE: howto manager. (line 1611) -* BFD_RELOC_METAG_TLS_LE_HI16: howto manager. (line 1612) -* BFD_RELOC_METAG_TLS_LE_LO16: howto manager. (line 1613) -* BFD_RELOC_METAG_TLS_TPOFF: howto manager. (line 1608) -* BFD_RELOC_MICROBLAZE_32_GOTOFF: howto manager. (line 2613) -* BFD_RELOC_MICROBLAZE_32_LO: howto manager. (line 2579) -* BFD_RELOC_MICROBLAZE_32_LO_PCREL: howto manager. (line 2582) -* BFD_RELOC_MICROBLAZE_32_ROSDA: howto manager. (line 2585) -* BFD_RELOC_MICROBLAZE_32_RWSDA: howto manager. (line 2588) -* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM: howto manager. (line 2591) -* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD: howto manager. (line 2629) -* BFD_RELOC_MICROBLAZE_32_TLSDTPREL: howto manager. (line 2631) -* BFD_RELOC_MICROBLAZE_64_GOT: howto manager. (line 2602) -* BFD_RELOC_MICROBLAZE_64_GOTOFF: howto manager. (line 2609) -* BFD_RELOC_MICROBLAZE_64_GOTPC: howto manager. (line 2598) -* BFD_RELOC_MICROBLAZE_64_NONE: howto manager. (line 2594) -* BFD_RELOC_MICROBLAZE_64_PLT: howto manager. (line 2605) -* BFD_RELOC_MICROBLAZE_64_TLS: howto manager. (line 2619) -* BFD_RELOC_MICROBLAZE_64_TLSDTPREL: howto manager. (line 2633) -* BFD_RELOC_MICROBLAZE_64_TLSGD: howto manager. (line 2621) -* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL: howto manager. (line 2636) -* BFD_RELOC_MICROBLAZE_64_TLSLD: howto manager. (line 2625) -* BFD_RELOC_MICROBLAZE_64_TLSTPREL: howto manager. (line 2639) -* BFD_RELOC_MICROBLAZE_COPY: howto manager. (line 2616) +* BFD_RELOC_M32C_HI8: howto manager. (line 1174) +* BFD_RELOC_M32C_RL_1ADDR: howto manager. (line 1176) +* BFD_RELOC_M32C_RL_2ADDR: howto manager. (line 1177) +* BFD_RELOC_M32C_RL_JUMP: howto manager. (line 1175) +* BFD_RELOC_M32R_10_PCREL: howto manager. (line 1182) +* BFD_RELOC_M32R_18_PCREL: howto manager. (line 1185) +* BFD_RELOC_M32R_24: howto manager. (line 1179) +* BFD_RELOC_M32R_26_PCREL: howto manager. (line 1187) +* BFD_RELOC_M32R_26_PLTREL: howto manager. (line 1201) +* BFD_RELOC_M32R_COPY: howto manager. (line 1202) +* BFD_RELOC_M32R_GLOB_DAT: howto manager. (line 1203) +* BFD_RELOC_M32R_GOT16_HI_SLO: howto manager. (line 1212) +* BFD_RELOC_M32R_GOT16_HI_ULO: howto manager. (line 1211) +* BFD_RELOC_M32R_GOT16_LO: howto manager. (line 1213) +* BFD_RELOC_M32R_GOT24: howto manager. (line 1200) +* BFD_RELOC_M32R_GOTOFF: howto manager. (line 1206) +* BFD_RELOC_M32R_GOTOFF_HI_SLO: howto manager. (line 1208) +* BFD_RELOC_M32R_GOTOFF_HI_ULO: howto manager. (line 1207) +* BFD_RELOC_M32R_GOTOFF_LO: howto manager. (line 1209) +* BFD_RELOC_M32R_GOTPC24: howto manager. (line 1210) +* BFD_RELOC_M32R_GOTPC_HI_SLO: howto manager. (line 1215) +* BFD_RELOC_M32R_GOTPC_HI_ULO: howto manager. (line 1214) +* BFD_RELOC_M32R_GOTPC_LO: howto manager. (line 1216) +* BFD_RELOC_M32R_HI16_SLO: howto manager. (line 1192) +* BFD_RELOC_M32R_HI16_ULO: howto manager. (line 1189) +* BFD_RELOC_M32R_JMP_SLOT: howto manager. (line 1204) +* BFD_RELOC_M32R_LO16: howto manager. (line 1195) +* BFD_RELOC_M32R_RELATIVE: howto manager. (line 1205) +* BFD_RELOC_M32R_SDA16: howto manager. (line 1197) +* BFD_RELOC_M68HC11_24: howto manager. (line 2087) +* BFD_RELOC_M68HC11_3B: howto manager. (line 2067) +* BFD_RELOC_M68HC11_HI8: howto manager. (line 2061) +* BFD_RELOC_M68HC11_LO16: howto manager. (line 2078) +* BFD_RELOC_M68HC11_LO8: howto manager. (line 2064) +* BFD_RELOC_M68HC11_PAGE: howto manager. (line 2083) +* BFD_RELOC_M68HC11_RL_GROUP: howto manager. (line 2074) +* BFD_RELOC_M68HC11_RL_JUMP: howto manager. (line 2069) +* BFD_RELOC_M68HC12_10_PCREL: howto manager. (line 2130) +* BFD_RELOC_M68HC12_16B: howto manager. (line 2126) +* BFD_RELOC_M68HC12_5B: howto manager. (line 2092) +* BFD_RELOC_M68HC12_9B: howto manager. (line 2124) +* BFD_RELOC_M68HC12_9_PCREL: howto manager. (line 2128) +* BFD_RELOC_M68HC12_HI8XG: howto manager. (line 2135) +* BFD_RELOC_M68HC12_LO8XG: howto manager. (line 2132) +* BFD_RELOC_MACH_O_ARM64_ADDEND: howto manager. (line 2574) +* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21: howto manager. (line 2576) +* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12: howto manager. (line 2578) +* BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT: howto manager. (line 2580) +* BFD_RELOC_MACH_O_LOCAL_SECTDIFF: howto manager. (line 2551) +* BFD_RELOC_MACH_O_PAIR: howto manager. (line 2553) +* BFD_RELOC_MACH_O_SECTDIFF: howto manager. (line 2548) +* BFD_RELOC_MACH_O_SUBTRACTOR32: howto manager. (line 2555) +* BFD_RELOC_MACH_O_SUBTRACTOR64: howto manager. (line 2557) +* BFD_RELOC_MACH_O_X86_64_BRANCH32: howto manager. (line 2559) +* BFD_RELOC_MACH_O_X86_64_BRANCH8: howto manager. (line 2560) +* BFD_RELOC_MACH_O_X86_64_GOT: howto manager. (line 2563) +* BFD_RELOC_MACH_O_X86_64_GOT_LOAD: howto manager. (line 2565) +* BFD_RELOC_MACH_O_X86_64_PCREL32_1: howto manager. (line 2568) +* BFD_RELOC_MACH_O_X86_64_PCREL32_2: howto manager. (line 2570) +* BFD_RELOC_MACH_O_X86_64_PCREL32_4: howto manager. (line 2572) +* BFD_RELOC_MCORE_PCREL_32: howto manager. (line 1554) +* BFD_RELOC_MCORE_PCREL_IMM11BY2: howto manager. (line 1552) +* BFD_RELOC_MCORE_PCREL_IMM4BY2: howto manager. (line 1553) +* BFD_RELOC_MCORE_PCREL_IMM8BY4: howto manager. (line 1551) +* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2: howto manager. (line 1555) +* BFD_RELOC_MCORE_RVA: howto manager. (line 1556) +* BFD_RELOC_MEP_16: howto manager. (line 1559) +* BFD_RELOC_MEP_32: howto manager. (line 1560) +* BFD_RELOC_MEP_8: howto manager. (line 1558) +* BFD_RELOC_MEP_ADDR24A4: howto manager. (line 1575) +* BFD_RELOC_MEP_GNU_VTENTRY: howto manager. (line 1577) +* BFD_RELOC_MEP_GNU_VTINHERIT: howto manager. (line 1576) +* BFD_RELOC_MEP_GPREL: howto manager. (line 1569) +* BFD_RELOC_MEP_HI16S: howto manager. (line 1568) +* BFD_RELOC_MEP_HI16U: howto manager. (line 1567) +* BFD_RELOC_MEP_LOW16: howto manager. (line 1566) +* BFD_RELOC_MEP_PCABS24A2: howto manager. (line 1565) +* BFD_RELOC_MEP_PCREL12A2: howto manager. (line 1562) +* BFD_RELOC_MEP_PCREL17A2: howto manager. (line 1563) +* BFD_RELOC_MEP_PCREL24A2: howto manager. (line 1564) +* BFD_RELOC_MEP_PCREL8A2: howto manager. (line 1561) +* BFD_RELOC_MEP_TPREL: howto manager. (line 1570) +* BFD_RELOC_MEP_TPREL7: howto manager. (line 1571) +* BFD_RELOC_MEP_TPREL7A2: howto manager. (line 1572) +* BFD_RELOC_MEP_TPREL7A4: howto manager. (line 1573) +* BFD_RELOC_MEP_UIMM24: howto manager. (line 1574) +* BFD_RELOC_METAG_COPY: howto manager. (line 1598) +* BFD_RELOC_METAG_GETSETOFF: howto manager. (line 1582) +* BFD_RELOC_METAG_GETSET_GOT: howto manager. (line 1590) +* BFD_RELOC_METAG_GETSET_GOTOFF: howto manager. (line 1589) +* BFD_RELOC_METAG_GLOB_DAT: howto manager. (line 1601) +* BFD_RELOC_METAG_GOTOFF: howto manager. (line 1596) +* BFD_RELOC_METAG_HI16_GOTOFF: howto manager. (line 1587) +* BFD_RELOC_METAG_HI16_GOTPC: howto manager. (line 1591) +* BFD_RELOC_METAG_HI16_PLT: howto manager. (line 1593) +* BFD_RELOC_METAG_HIADDR16: howto manager. (line 1579) +* BFD_RELOC_METAG_HIOG: howto manager. (line 1583) +* BFD_RELOC_METAG_JMP_SLOT: howto manager. (line 1599) +* BFD_RELOC_METAG_LO16_GOTOFF: howto manager. (line 1588) +* BFD_RELOC_METAG_LO16_GOTPC: howto manager. (line 1592) +* BFD_RELOC_METAG_LO16_PLT: howto manager. (line 1594) +* BFD_RELOC_METAG_LOADDR16: howto manager. (line 1580) +* BFD_RELOC_METAG_LOOG: howto manager. (line 1584) +* BFD_RELOC_METAG_PLT: howto manager. (line 1597) +* BFD_RELOC_METAG_REL16: howto manager. (line 1586) +* BFD_RELOC_METAG_REL8: howto manager. (line 1585) +* BFD_RELOC_METAG_RELATIVE: howto manager. (line 1600) +* BFD_RELOC_METAG_RELBRANCH: howto manager. (line 1581) +* BFD_RELOC_METAG_RELBRANCH_PLT: howto manager. (line 1595) +* BFD_RELOC_METAG_TLS_DTPMOD: howto manager. (line 1612) +* BFD_RELOC_METAG_TLS_DTPOFF: howto manager. (line 1613) +* BFD_RELOC_METAG_TLS_GD: howto manager. (line 1602) +* BFD_RELOC_METAG_TLS_IE: howto manager. (line 1607) +* BFD_RELOC_METAG_TLS_IENONPIC: howto manager. (line 1608) +* BFD_RELOC_METAG_TLS_IENONPIC_HI16: howto manager. (line 1609) +* BFD_RELOC_METAG_TLS_IENONPIC_LO16: howto manager. (line 1610) +* BFD_RELOC_METAG_TLS_LDM: howto manager. (line 1603) +* BFD_RELOC_METAG_TLS_LDO: howto manager. (line 1606) +* BFD_RELOC_METAG_TLS_LDO_HI16: howto manager. (line 1604) +* BFD_RELOC_METAG_TLS_LDO_LO16: howto manager. (line 1605) +* BFD_RELOC_METAG_TLS_LE: howto manager. (line 1614) +* BFD_RELOC_METAG_TLS_LE_HI16: howto manager. (line 1615) +* BFD_RELOC_METAG_TLS_LE_LO16: howto manager. (line 1616) +* BFD_RELOC_METAG_TLS_TPOFF: howto manager. (line 1611) +* BFD_RELOC_MICROBLAZE_32_GOTOFF: howto manager. (line 2616) +* BFD_RELOC_MICROBLAZE_32_LO: howto manager. (line 2582) +* BFD_RELOC_MICROBLAZE_32_LO_PCREL: howto manager. (line 2585) +* BFD_RELOC_MICROBLAZE_32_ROSDA: howto manager. (line 2588) +* BFD_RELOC_MICROBLAZE_32_RWSDA: howto manager. (line 2591) +* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM: howto manager. (line 2594) +* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD: howto manager. (line 2632) +* BFD_RELOC_MICROBLAZE_32_TLSDTPREL: howto manager. (line 2634) +* BFD_RELOC_MICROBLAZE_64_GOT: howto manager. (line 2605) +* BFD_RELOC_MICROBLAZE_64_GOTOFF: howto manager. (line 2612) +* BFD_RELOC_MICROBLAZE_64_GOTPC: howto manager. (line 2601) +* BFD_RELOC_MICROBLAZE_64_NONE: howto manager. (line 2597) +* BFD_RELOC_MICROBLAZE_64_PLT: howto manager. (line 2608) +* BFD_RELOC_MICROBLAZE_64_TLS: howto manager. (line 2622) +* BFD_RELOC_MICROBLAZE_64_TLSDTPREL: howto manager. (line 2636) +* BFD_RELOC_MICROBLAZE_64_TLSGD: howto manager. (line 2624) +* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL: howto manager. (line 2639) +* BFD_RELOC_MICROBLAZE_64_TLSLD: howto manager. (line 2628) +* BFD_RELOC_MICROBLAZE_64_TLSTPREL: howto manager. (line 2642) +* BFD_RELOC_MICROBLAZE_COPY: howto manager. (line 2619) * BFD_RELOC_MICROMIPS_10_PCREL_S1: howto manager. (line 356) * BFD_RELOC_MICROMIPS_16_PCREL_S1: howto manager. (line 357) * BFD_RELOC_MICROMIPS_7_PCREL_S1: howto manager. (line 355) -* BFD_RELOC_MICROMIPS_CALL16: howto manager. (line 372) -* BFD_RELOC_MICROMIPS_CALL_HI16: howto manager. (line 378) -* BFD_RELOC_MICROMIPS_CALL_LO16: howto manager. (line 380) -* BFD_RELOC_MICROMIPS_GOT16: howto manager. (line 370) -* BFD_RELOC_MICROMIPS_GOT_DISP: howto manager. (line 388) -* BFD_RELOC_MICROMIPS_GOT_HI16: howto manager. (line 374) -* BFD_RELOC_MICROMIPS_GOT_LO16: howto manager. (line 376) -* BFD_RELOC_MICROMIPS_GOT_OFST: howto manager. (line 386) -* BFD_RELOC_MICROMIPS_GOT_PAGE: howto manager. (line 384) -* BFD_RELOC_MICROMIPS_GPREL16: howto manager. (line 364) -* BFD_RELOC_MICROMIPS_HI16: howto manager. (line 365) -* BFD_RELOC_MICROMIPS_HI16_S: howto manager. (line 366) -* BFD_RELOC_MICROMIPS_HIGHER: howto manager. (line 397) -* BFD_RELOC_MICROMIPS_HIGHEST: howto manager. (line 395) -* BFD_RELOC_MICROMIPS_JALR: howto manager. (line 403) +* BFD_RELOC_MICROMIPS_CALL16: howto manager. (line 374) +* BFD_RELOC_MICROMIPS_CALL_HI16: howto manager. (line 380) +* BFD_RELOC_MICROMIPS_CALL_LO16: howto manager. (line 382) +* BFD_RELOC_MICROMIPS_GOT16: howto manager. (line 372) +* BFD_RELOC_MICROMIPS_GOT_DISP: howto manager. (line 390) +* BFD_RELOC_MICROMIPS_GOT_HI16: howto manager. (line 376) +* BFD_RELOC_MICROMIPS_GOT_LO16: howto manager. (line 378) +* BFD_RELOC_MICROMIPS_GOT_OFST: howto manager. (line 388) +* BFD_RELOC_MICROMIPS_GOT_PAGE: howto manager. (line 386) +* BFD_RELOC_MICROMIPS_GPREL16: howto manager. (line 366) +* BFD_RELOC_MICROMIPS_HI16: howto manager. (line 367) +* BFD_RELOC_MICROMIPS_HI16_S: howto manager. (line 368) +* BFD_RELOC_MICROMIPS_HIGHER: howto manager. (line 399) +* BFD_RELOC_MICROMIPS_HIGHEST: howto manager. (line 397) +* BFD_RELOC_MICROMIPS_JALR: howto manager. (line 405) * BFD_RELOC_MICROMIPS_JMP: howto manager. (line 310) * BFD_RELOC_MICROMIPS_LITERAL: howto manager. (line 353) -* BFD_RELOC_MICROMIPS_LO16: howto manager. (line 367) -* BFD_RELOC_MICROMIPS_SCN_DISP: howto manager. (line 399) -* BFD_RELOC_MICROMIPS_SUB: howto manager. (line 382) -* BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16: howto manager. (line 413) -* BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16: howto manager. (line 415) -* BFD_RELOC_MICROMIPS_TLS_GD: howto manager. (line 409) -* BFD_RELOC_MICROMIPS_TLS_GOTTPREL: howto manager. (line 417) -* BFD_RELOC_MICROMIPS_TLS_LDM: howto manager. (line 411) -* BFD_RELOC_MICROMIPS_TLS_TPREL_HI16: howto manager. (line 421) -* BFD_RELOC_MICROMIPS_TLS_TPREL_LO16: howto manager. (line 423) +* BFD_RELOC_MICROMIPS_LO16: howto manager. (line 369) +* BFD_RELOC_MICROMIPS_SCN_DISP: howto manager. (line 401) +* BFD_RELOC_MICROMIPS_SUB: howto manager. (line 384) +* BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16: howto manager. (line 415) +* BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16: howto manager. (line 417) +* BFD_RELOC_MICROMIPS_TLS_GD: howto manager. (line 411) +* BFD_RELOC_MICROMIPS_TLS_GOTTPREL: howto manager. (line 419) +* BFD_RELOC_MICROMIPS_TLS_LDM: howto manager. (line 413) +* BFD_RELOC_MICROMIPS_TLS_TPREL_HI16: howto manager. (line 423) +* BFD_RELOC_MICROMIPS_TLS_TPREL_LO16: howto manager. (line 425) +* BFD_RELOC_MIPS16_16_PCREL_S1: howto manager. (line 359) * BFD_RELOC_MIPS16_CALL16: howto manager. (line 332) * BFD_RELOC_MIPS16_GOT16: howto manager. (line 331) * BFD_RELOC_MIPS16_GPREL: howto manager. (line 314) @@ -12444,629 +12506,629 @@ BFD Index * BFD_RELOC_MIPS16_TLS_LDM: howto manager. (line 345) * BFD_RELOC_MIPS16_TLS_TPREL_HI16: howto manager. (line 349) * BFD_RELOC_MIPS16_TLS_TPREL_LO16: howto manager. (line 350) -* BFD_RELOC_MIPS_18_PCREL_S3: howto manager. (line 361) -* BFD_RELOC_MIPS_19_PCREL_S2: howto manager. (line 362) -* BFD_RELOC_MIPS_21_PCREL_S2: howto manager. (line 359) -* BFD_RELOC_MIPS_26_PCREL_S2: howto manager. (line 360) -* BFD_RELOC_MIPS_CALL16: howto manager. (line 371) -* BFD_RELOC_MIPS_CALL_HI16: howto manager. (line 377) -* BFD_RELOC_MIPS_CALL_LO16: howto manager. (line 379) -* BFD_RELOC_MIPS_COPY: howto manager. (line 426) -* BFD_RELOC_MIPS_DELETE: howto manager. (line 393) -* BFD_RELOC_MIPS_EH: howto manager. (line 424) -* BFD_RELOC_MIPS_GOT16: howto manager. (line 369) -* BFD_RELOC_MIPS_GOT_DISP: howto manager. (line 387) -* BFD_RELOC_MIPS_GOT_HI16: howto manager. (line 373) -* BFD_RELOC_MIPS_GOT_LO16: howto manager. (line 375) -* BFD_RELOC_MIPS_GOT_OFST: howto manager. (line 385) -* BFD_RELOC_MIPS_GOT_PAGE: howto manager. (line 383) -* BFD_RELOC_MIPS_HIGHER: howto manager. (line 396) -* BFD_RELOC_MIPS_HIGHEST: howto manager. (line 394) -* BFD_RELOC_MIPS_INSERT_A: howto manager. (line 391) -* BFD_RELOC_MIPS_INSERT_B: howto manager. (line 392) -* BFD_RELOC_MIPS_JALR: howto manager. (line 402) +* BFD_RELOC_MIPS_18_PCREL_S3: howto manager. (line 363) +* BFD_RELOC_MIPS_19_PCREL_S2: howto manager. (line 364) +* BFD_RELOC_MIPS_21_PCREL_S2: howto manager. (line 361) +* BFD_RELOC_MIPS_26_PCREL_S2: howto manager. (line 362) +* BFD_RELOC_MIPS_CALL16: howto manager. (line 373) +* BFD_RELOC_MIPS_CALL_HI16: howto manager. (line 379) +* BFD_RELOC_MIPS_CALL_LO16: howto manager. (line 381) +* BFD_RELOC_MIPS_COPY: howto manager. (line 428) +* BFD_RELOC_MIPS_DELETE: howto manager. (line 395) +* BFD_RELOC_MIPS_EH: howto manager. (line 426) +* BFD_RELOC_MIPS_GOT16: howto manager. (line 371) +* BFD_RELOC_MIPS_GOT_DISP: howto manager. (line 389) +* BFD_RELOC_MIPS_GOT_HI16: howto manager. (line 375) +* BFD_RELOC_MIPS_GOT_LO16: howto manager. (line 377) +* BFD_RELOC_MIPS_GOT_OFST: howto manager. (line 387) +* BFD_RELOC_MIPS_GOT_PAGE: howto manager. (line 385) +* BFD_RELOC_MIPS_HIGHER: howto manager. (line 398) +* BFD_RELOC_MIPS_HIGHEST: howto manager. (line 396) +* BFD_RELOC_MIPS_INSERT_A: howto manager. (line 393) +* BFD_RELOC_MIPS_INSERT_B: howto manager. (line 394) +* BFD_RELOC_MIPS_JALR: howto manager. (line 404) * BFD_RELOC_MIPS_JMP: howto manager. (line 309) -* BFD_RELOC_MIPS_JUMP_SLOT: howto manager. (line 427) +* BFD_RELOC_MIPS_JUMP_SLOT: howto manager. (line 429) * BFD_RELOC_MIPS_LITERAL: howto manager. (line 352) -* BFD_RELOC_MIPS_REL16: howto manager. (line 400) -* BFD_RELOC_MIPS_RELGOT: howto manager. (line 401) -* BFD_RELOC_MIPS_SCN_DISP: howto manager. (line 398) -* BFD_RELOC_MIPS_SHIFT5: howto manager. (line 389) -* BFD_RELOC_MIPS_SHIFT6: howto manager. (line 390) -* BFD_RELOC_MIPS_SUB: howto manager. (line 381) -* 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 412) -* BFD_RELOC_MIPS_TLS_DTPREL_LO16: howto manager. (line 414) -* BFD_RELOC_MIPS_TLS_GD: howto manager. (line 408) -* BFD_RELOC_MIPS_TLS_GOTTPREL: howto manager. (line 416) -* BFD_RELOC_MIPS_TLS_LDM: howto manager. (line 410) -* BFD_RELOC_MIPS_TLS_TPREL32: howto manager. (line 418) -* BFD_RELOC_MIPS_TLS_TPREL64: howto manager. (line 419) -* BFD_RELOC_MIPS_TLS_TPREL_HI16: howto manager. (line 420) -* BFD_RELOC_MIPS_TLS_TPREL_LO16: howto manager. (line 422) -* BFD_RELOC_MMIX_ADDR19: howto manager. (line 1637) -* BFD_RELOC_MMIX_ADDR27: howto manager. (line 1640) -* BFD_RELOC_MMIX_BASE_PLUS_OFFSET: howto manager. (line 1649) -* BFD_RELOC_MMIX_CBRANCH: howto manager. (line 1620) -* BFD_RELOC_MMIX_CBRANCH_1: howto manager. (line 1622) -* BFD_RELOC_MMIX_CBRANCH_2: howto manager. (line 1623) -* BFD_RELOC_MMIX_CBRANCH_3: howto manager. (line 1624) -* BFD_RELOC_MMIX_CBRANCH_J: howto manager. (line 1621) -* BFD_RELOC_MMIX_GETA: howto manager. (line 1615) -* BFD_RELOC_MMIX_GETA_1: howto manager. (line 1616) -* BFD_RELOC_MMIX_GETA_2: howto manager. (line 1617) -* BFD_RELOC_MMIX_GETA_3: howto manager. (line 1618) -* BFD_RELOC_MMIX_JMP: howto manager. (line 1632) -* BFD_RELOC_MMIX_JMP_1: howto manager. (line 1633) -* BFD_RELOC_MMIX_JMP_2: howto manager. (line 1634) -* BFD_RELOC_MMIX_JMP_3: howto manager. (line 1635) -* BFD_RELOC_MMIX_LOCAL: howto manager. (line 1652) -* BFD_RELOC_MMIX_PUSHJ: howto manager. (line 1626) -* BFD_RELOC_MMIX_PUSHJ_1: howto manager. (line 1627) -* BFD_RELOC_MMIX_PUSHJ_2: howto manager. (line 1628) -* BFD_RELOC_MMIX_PUSHJ_3: howto manager. (line 1629) -* BFD_RELOC_MMIX_PUSHJ_STUBBABLE: howto manager. (line 1630) -* BFD_RELOC_MMIX_REG: howto manager. (line 1646) -* BFD_RELOC_MMIX_REG_OR_BYTE: howto manager. (line 1643) -* BFD_RELOC_MN10300_16_PCREL: howto manager. (line 515) -* BFD_RELOC_MN10300_32_PCREL: howto manager. (line 512) -* BFD_RELOC_MN10300_ALIGN: howto manager. (line 499) -* BFD_RELOC_MN10300_COPY: howto manager. (line 487) -* BFD_RELOC_MN10300_GLOB_DAT: howto manager. (line 489) -* BFD_RELOC_MN10300_GOT16: howto manager. (line 484) -* BFD_RELOC_MN10300_GOT24: howto manager. (line 481) -* BFD_RELOC_MN10300_GOT32: howto manager. (line 478) -* BFD_RELOC_MN10300_GOTOFF24: howto manager. (line 476) -* BFD_RELOC_MN10300_JMP_SLOT: howto manager. (line 491) -* BFD_RELOC_MN10300_RELATIVE: howto manager. (line 493) -* BFD_RELOC_MN10300_SYM_DIFF: howto manager. (line 495) -* BFD_RELOC_MN10300_TLS_DTPMOD: howto manager. (line 508) -* BFD_RELOC_MN10300_TLS_DTPOFF: howto manager. (line 509) -* BFD_RELOC_MN10300_TLS_GD: howto manager. (line 502) -* BFD_RELOC_MN10300_TLS_GOTIE: howto manager. (line 505) -* BFD_RELOC_MN10300_TLS_IE: howto manager. (line 506) -* BFD_RELOC_MN10300_TLS_LD: howto manager. (line 503) -* BFD_RELOC_MN10300_TLS_LDO: howto manager. (line 504) -* BFD_RELOC_MN10300_TLS_LE: howto manager. (line 507) -* BFD_RELOC_MN10300_TLS_TPOFF: howto manager. (line 510) -* BFD_RELOC_MOXIE_10_PCREL: howto manager. (line 429) -* BFD_RELOC_MSP430X_ABS16: howto manager. (line 2387) -* BFD_RELOC_MSP430X_ABS20_ADR_DST: howto manager. (line 2384) -* BFD_RELOC_MSP430X_ABS20_ADR_SRC: howto manager. (line 2383) -* BFD_RELOC_MSP430X_ABS20_EXT_DST: howto manager. (line 2381) -* BFD_RELOC_MSP430X_ABS20_EXT_ODST: howto manager. (line 2382) -* BFD_RELOC_MSP430X_ABS20_EXT_SRC: howto manager. (line 2380) -* BFD_RELOC_MSP430X_PCR16: howto manager. (line 2385) -* BFD_RELOC_MSP430X_PCR20_CALL: howto manager. (line 2386) -* BFD_RELOC_MSP430X_PCR20_EXT_DST: howto manager. (line 2378) -* BFD_RELOC_MSP430X_PCR20_EXT_ODST: howto manager. (line 2379) -* BFD_RELOC_MSP430X_PCR20_EXT_SRC: howto manager. (line 2377) -* BFD_RELOC_MSP430_10_PCREL: howto manager. (line 2369) -* BFD_RELOC_MSP430_16: howto manager. (line 2371) -* BFD_RELOC_MSP430_16_BYTE: howto manager. (line 2373) -* BFD_RELOC_MSP430_16_PCREL: howto manager. (line 2370) -* BFD_RELOC_MSP430_16_PCREL_BYTE: howto manager. (line 2372) -* BFD_RELOC_MSP430_2X_PCREL: howto manager. (line 2374) -* BFD_RELOC_MSP430_ABS8: howto manager. (line 2376) -* BFD_RELOC_MSP430_ABS_HI16: howto manager. (line 2388) -* BFD_RELOC_MSP430_PREL31: howto manager. (line 2389) -* BFD_RELOC_MSP430_RL_PCREL: howto manager. (line 2375) -* BFD_RELOC_MSP430_SYM_DIFF: howto manager. (line 2390) -* BFD_RELOC_MT_GNU_VTENTRY: howto manager. (line 2365) -* BFD_RELOC_MT_GNU_VTINHERIT: howto manager. (line 2363) -* BFD_RELOC_MT_HI16: howto manager. (line 2359) -* BFD_RELOC_MT_LO16: howto manager. (line 2361) -* BFD_RELOC_MT_PC16: howto manager. (line 2357) -* BFD_RELOC_MT_PCINSN8: howto manager. (line 2367) -* BFD_RELOC_NDS32_10IFCU_PCREL: howto manager. (line 1365) -* BFD_RELOC_NDS32_10_UPCREL: howto manager. (line 1336) -* BFD_RELOC_NDS32_15_FIXED: howto manager. (line 1297) -* BFD_RELOC_NDS32_15_PCREL: howto manager. (line 1223) -* BFD_RELOC_NDS32_17IFC_PCREL: howto manager. (line 1364) -* BFD_RELOC_NDS32_17_FIXED: howto manager. (line 1298) -* BFD_RELOC_NDS32_17_PCREL: howto manager. (line 1225) -* BFD_RELOC_NDS32_20: howto manager. (line 1215) -* BFD_RELOC_NDS32_25_ABS: howto manager. (line 1360) -* BFD_RELOC_NDS32_25_FIXED: howto manager. (line 1299) -* BFD_RELOC_NDS32_25_PCREL: howto manager. (line 1227) -* BFD_RELOC_NDS32_25_PLTREL: howto manager. (line 1273) -* BFD_RELOC_NDS32_5: howto manager. (line 1334) -* BFD_RELOC_NDS32_9_FIXED: howto manager. (line 1296) -* BFD_RELOC_NDS32_9_PCREL: howto manager. (line 1217) -* BFD_RELOC_NDS32_9_PLTREL: howto manager. (line 1272) -* BFD_RELOC_NDS32_COPY: howto manager. (line 1274) -* BFD_RELOC_NDS32_DATA: howto manager. (line 1362) -* BFD_RELOC_NDS32_DIFF16: howto manager. (line 1355) -* BFD_RELOC_NDS32_DIFF32: howto manager. (line 1356) -* BFD_RELOC_NDS32_DIFF8: howto manager. (line 1354) -* BFD_RELOC_NDS32_DIFF_ULEB128: howto manager. (line 1357) -* BFD_RELOC_NDS32_DWARF2_LEB: howto manager. (line 1320) -* BFD_RELOC_NDS32_DWARF2_OP1: howto manager. (line 1318) -* BFD_RELOC_NDS32_DWARF2_OP2: howto manager. (line 1319) -* BFD_RELOC_NDS32_EMPTY: howto manager. (line 1358) -* BFD_RELOC_NDS32_GLOB_DAT: howto manager. (line 1275) -* BFD_RELOC_NDS32_GOT15S2: howto manager. (line 1331) -* BFD_RELOC_NDS32_GOT17S2: howto manager. (line 1332) -* BFD_RELOC_NDS32_GOT20: howto manager. (line 1271) -* BFD_RELOC_NDS32_GOTOFF: howto manager. (line 1278) -* BFD_RELOC_NDS32_GOTOFF_HI20: howto manager. (line 1279) -* BFD_RELOC_NDS32_GOTOFF_LO12: howto manager. (line 1280) -* BFD_RELOC_NDS32_GOTOFF_LO15: howto manager. (line 1329) -* BFD_RELOC_NDS32_GOTOFF_LO19: howto manager. (line 1330) -* BFD_RELOC_NDS32_GOTOFF_SUFF: howto manager. (line 1343) -* BFD_RELOC_NDS32_GOTPC20: howto manager. (line 1281) -* BFD_RELOC_NDS32_GOTPC_HI20: howto manager. (line 1284) -* BFD_RELOC_NDS32_GOTPC_LO12: howto manager. (line 1285) -* BFD_RELOC_NDS32_GOTTPOFF: howto manager. (line 1372) -* BFD_RELOC_NDS32_GOT_HI20: howto manager. (line 1282) -* BFD_RELOC_NDS32_GOT_LO12: howto manager. (line 1283) -* BFD_RELOC_NDS32_GOT_LO15: howto manager. (line 1327) -* BFD_RELOC_NDS32_GOT_LO19: howto manager. (line 1328) -* BFD_RELOC_NDS32_GOT_SUFF: howto manager. (line 1342) -* BFD_RELOC_NDS32_HI20: howto manager. (line 1229) -* BFD_RELOC_NDS32_INSN16: howto manager. (line 1287) -* BFD_RELOC_NDS32_JMP_SLOT: howto manager. (line 1276) -* BFD_RELOC_NDS32_LABEL: howto manager. (line 1288) -* BFD_RELOC_NDS32_LO12S0: howto manager. (line 1241) -* BFD_RELOC_NDS32_LO12S0_ORI: howto manager. (line 1244) -* BFD_RELOC_NDS32_LO12S1: howto manager. (line 1238) -* BFD_RELOC_NDS32_LO12S2: howto manager. (line 1235) -* BFD_RELOC_NDS32_LO12S2_DP: howto manager. (line 1315) -* BFD_RELOC_NDS32_LO12S2_SP: howto manager. (line 1316) -* BFD_RELOC_NDS32_LO12S3: howto manager. (line 1232) -* BFD_RELOC_NDS32_LOADSTORE: howto manager. (line 1295) -* BFD_RELOC_NDS32_LONGCALL1: howto manager. (line 1289) -* BFD_RELOC_NDS32_LONGCALL2: howto manager. (line 1290) -* BFD_RELOC_NDS32_LONGCALL3: howto manager. (line 1291) -* BFD_RELOC_NDS32_LONGCALL4: howto manager. (line 1300) -* BFD_RELOC_NDS32_LONGCALL5: howto manager. (line 1301) -* BFD_RELOC_NDS32_LONGCALL6: howto manager. (line 1302) -* BFD_RELOC_NDS32_LONGJUMP1: howto manager. (line 1292) -* BFD_RELOC_NDS32_LONGJUMP2: howto manager. (line 1293) -* BFD_RELOC_NDS32_LONGJUMP3: howto manager. (line 1294) -* BFD_RELOC_NDS32_LONGJUMP4: howto manager. (line 1303) -* BFD_RELOC_NDS32_LONGJUMP5: howto manager. (line 1304) -* BFD_RELOC_NDS32_LONGJUMP6: howto manager. (line 1305) -* BFD_RELOC_NDS32_LONGJUMP7: howto manager. (line 1306) -* BFD_RELOC_NDS32_MINUEND: howto manager. (line 1352) -* BFD_RELOC_NDS32_MULCALL_SUFF: howto manager. (line 1345) -* BFD_RELOC_NDS32_PLTBLOCK: howto manager. (line 1349) -* BFD_RELOC_NDS32_PLTREL_HI20: howto manager. (line 1308) -* BFD_RELOC_NDS32_PLTREL_LO12: howto manager. (line 1309) -* BFD_RELOC_NDS32_PLT_GOTREL_HI20: howto manager. (line 1310) -* BFD_RELOC_NDS32_PLT_GOTREL_LO12: howto manager. (line 1311) -* BFD_RELOC_NDS32_PLT_GOTREL_LO15: howto manager. (line 1325) -* BFD_RELOC_NDS32_PLT_GOTREL_LO19: howto manager. (line 1326) -* BFD_RELOC_NDS32_PLT_GOTREL_LO20: howto manager. (line 1324) -* BFD_RELOC_NDS32_PLT_GOT_SUFF: howto manager. (line 1344) -* BFD_RELOC_NDS32_PTR: howto manager. (line 1346) -* BFD_RELOC_NDS32_PTR_COUNT: howto manager. (line 1347) -* BFD_RELOC_NDS32_PTR_RESOLVED: howto manager. (line 1348) -* BFD_RELOC_NDS32_RELATIVE: howto manager. (line 1277) -* BFD_RELOC_NDS32_RELAX_ENTRY: howto manager. (line 1341) -* BFD_RELOC_NDS32_RELAX_REGION_BEGIN: howto manager. (line 1350) -* BFD_RELOC_NDS32_RELAX_REGION_END: howto manager. (line 1351) -* BFD_RELOC_NDS32_SDA12S2_DP: howto manager. (line 1313) -* BFD_RELOC_NDS32_SDA12S2_SP: howto manager. (line 1314) -* BFD_RELOC_NDS32_SDA15S0: howto manager. (line 1256) -* BFD_RELOC_NDS32_SDA15S1: howto manager. (line 1253) -* BFD_RELOC_NDS32_SDA15S2: howto manager. (line 1250) -* BFD_RELOC_NDS32_SDA15S3: howto manager. (line 1247) -* BFD_RELOC_NDS32_SDA16S3: howto manager. (line 1259) -* BFD_RELOC_NDS32_SDA17S2: howto manager. (line 1262) -* BFD_RELOC_NDS32_SDA18S1: howto manager. (line 1265) -* BFD_RELOC_NDS32_SDA19S0: howto manager. (line 1268) -* BFD_RELOC_NDS32_SDA_FP7U2_RELA: howto manager. (line 1339) -* BFD_RELOC_NDS32_SUBTRAHEND: howto manager. (line 1353) -* BFD_RELOC_NDS32_TLS_IE_HI20: howto manager. (line 1373) -* BFD_RELOC_NDS32_TLS_IE_LO12S2: howto manager. (line 1374) -* BFD_RELOC_NDS32_TLS_LE_15S0: howto manager. (line 1377) -* BFD_RELOC_NDS32_TLS_LE_15S1: howto manager. (line 1378) -* BFD_RELOC_NDS32_TLS_LE_15S2: howto manager. (line 1379) -* BFD_RELOC_NDS32_TLS_LE_20: howto manager. (line 1376) -* BFD_RELOC_NDS32_TLS_LE_ADD: howto manager. (line 1370) -* BFD_RELOC_NDS32_TLS_LE_HI20: howto manager. (line 1368) -* BFD_RELOC_NDS32_TLS_LE_LO12: howto manager. (line 1369) -* BFD_RELOC_NDS32_TLS_LE_LS: howto manager. (line 1371) -* BFD_RELOC_NDS32_TLS_TPOFF: howto manager. (line 1375) -* BFD_RELOC_NDS32_TPOFF: howto manager. (line 1367) -* BFD_RELOC_NDS32_TRAN: howto manager. (line 1363) -* BFD_RELOC_NDS32_UPDATE_TA: howto manager. (line 1322) -* BFD_RELOC_NDS32_WORD_9_PCREL: howto manager. (line 1220) -* BFD_RELOC_NIOS2_ALIGN: howto manager. (line 2406) -* BFD_RELOC_NIOS2_CACHE_OPX: howto manager. (line 2396) -* BFD_RELOC_NIOS2_CALL16: howto manager. (line 2408) -* BFD_RELOC_NIOS2_CALL26: howto manager. (line 2394) -* BFD_RELOC_NIOS2_CALL26_NOAT: howto manager. (line 2426) -* BFD_RELOC_NIOS2_CALLR: howto manager. (line 2405) -* BFD_RELOC_NIOS2_CALL_HA: howto manager. (line 2430) -* BFD_RELOC_NIOS2_CALL_LO: howto manager. (line 2429) -* BFD_RELOC_NIOS2_CJMP: howto manager. (line 2404) -* BFD_RELOC_NIOS2_COPY: howto manager. (line 2421) -* BFD_RELOC_NIOS2_GLOB_DAT: howto manager. (line 2422) -* BFD_RELOC_NIOS2_GOT16: howto manager. (line 2407) -* BFD_RELOC_NIOS2_GOTOFF: howto manager. (line 2425) -* BFD_RELOC_NIOS2_GOTOFF_HA: howto manager. (line 2410) -* BFD_RELOC_NIOS2_GOTOFF_LO: howto manager. (line 2409) -* BFD_RELOC_NIOS2_GOT_HA: howto manager. (line 2428) -* BFD_RELOC_NIOS2_GOT_LO: howto manager. (line 2427) -* BFD_RELOC_NIOS2_GPREL: howto manager. (line 2402) -* BFD_RELOC_NIOS2_HI16: howto manager. (line 2399) -* BFD_RELOC_NIOS2_HIADJ16: howto manager. (line 2401) -* BFD_RELOC_NIOS2_IMM5: howto manager. (line 2395) -* BFD_RELOC_NIOS2_IMM6: howto manager. (line 2397) -* BFD_RELOC_NIOS2_IMM8: howto manager. (line 2398) -* BFD_RELOC_NIOS2_JUMP_SLOT: howto manager. (line 2423) -* BFD_RELOC_NIOS2_LO16: howto manager. (line 2400) -* BFD_RELOC_NIOS2_PCREL_HA: howto manager. (line 2412) -* BFD_RELOC_NIOS2_PCREL_LO: howto manager. (line 2411) -* BFD_RELOC_NIOS2_R2_F1I5_2: howto manager. (line 2440) -* BFD_RELOC_NIOS2_R2_I10_1_PCREL: howto manager. (line 2432) -* BFD_RELOC_NIOS2_R2_L5I4X1: howto manager. (line 2441) -* BFD_RELOC_NIOS2_R2_S12: howto manager. (line 2431) -* BFD_RELOC_NIOS2_R2_T1I7_1_PCREL: howto manager. (line 2433) -* BFD_RELOC_NIOS2_R2_T1I7_2: howto manager. (line 2434) -* BFD_RELOC_NIOS2_R2_T1X1I6: howto manager. (line 2442) -* BFD_RELOC_NIOS2_R2_T1X1I6_2: howto manager. (line 2443) -* BFD_RELOC_NIOS2_R2_T2I4: howto manager. (line 2435) -* BFD_RELOC_NIOS2_R2_T2I4_1: howto manager. (line 2436) -* BFD_RELOC_NIOS2_R2_T2I4_2: howto manager. (line 2437) -* BFD_RELOC_NIOS2_R2_X1I7_2: howto manager. (line 2438) -* BFD_RELOC_NIOS2_R2_X2L5: howto manager. (line 2439) -* BFD_RELOC_NIOS2_RELATIVE: howto manager. (line 2424) -* BFD_RELOC_NIOS2_S16: howto manager. (line 2392) -* BFD_RELOC_NIOS2_TLS_DTPMOD: howto manager. (line 2418) -* BFD_RELOC_NIOS2_TLS_DTPREL: howto manager. (line 2419) -* BFD_RELOC_NIOS2_TLS_GD16: howto manager. (line 2413) -* BFD_RELOC_NIOS2_TLS_IE16: howto manager. (line 2416) -* BFD_RELOC_NIOS2_TLS_LDM16: howto manager. (line 2414) -* BFD_RELOC_NIOS2_TLS_LDO16: howto manager. (line 2415) -* BFD_RELOC_NIOS2_TLS_LE16: howto manager. (line 2417) -* BFD_RELOC_NIOS2_TLS_TPREL: howto manager. (line 2420) -* BFD_RELOC_NIOS2_U16: howto manager. (line 2393) -* BFD_RELOC_NIOS2_UJMP: howto manager. (line 2403) +* BFD_RELOC_MIPS_REL16: howto manager. (line 402) +* BFD_RELOC_MIPS_RELGOT: howto manager. (line 403) +* BFD_RELOC_MIPS_SCN_DISP: howto manager. (line 400) +* BFD_RELOC_MIPS_SHIFT5: howto manager. (line 391) +* BFD_RELOC_MIPS_SHIFT6: howto manager. (line 392) +* BFD_RELOC_MIPS_SUB: howto manager. (line 383) +* BFD_RELOC_MIPS_TLS_DTPMOD32: howto manager. (line 406) +* BFD_RELOC_MIPS_TLS_DTPMOD64: howto manager. (line 408) +* BFD_RELOC_MIPS_TLS_DTPREL32: howto manager. (line 407) +* BFD_RELOC_MIPS_TLS_DTPREL64: howto manager. (line 409) +* BFD_RELOC_MIPS_TLS_DTPREL_HI16: howto manager. (line 414) +* BFD_RELOC_MIPS_TLS_DTPREL_LO16: howto manager. (line 416) +* BFD_RELOC_MIPS_TLS_GD: howto manager. (line 410) +* BFD_RELOC_MIPS_TLS_GOTTPREL: howto manager. (line 418) +* BFD_RELOC_MIPS_TLS_LDM: howto manager. (line 412) +* BFD_RELOC_MIPS_TLS_TPREL32: howto manager. (line 420) +* BFD_RELOC_MIPS_TLS_TPREL64: howto manager. (line 421) +* BFD_RELOC_MIPS_TLS_TPREL_HI16: howto manager. (line 422) +* BFD_RELOC_MIPS_TLS_TPREL_LO16: howto manager. (line 424) +* BFD_RELOC_MMIX_ADDR19: howto manager. (line 1640) +* BFD_RELOC_MMIX_ADDR27: howto manager. (line 1643) +* BFD_RELOC_MMIX_BASE_PLUS_OFFSET: howto manager. (line 1652) +* BFD_RELOC_MMIX_CBRANCH: howto manager. (line 1623) +* BFD_RELOC_MMIX_CBRANCH_1: howto manager. (line 1625) +* BFD_RELOC_MMIX_CBRANCH_2: howto manager. (line 1626) +* BFD_RELOC_MMIX_CBRANCH_3: howto manager. (line 1627) +* BFD_RELOC_MMIX_CBRANCH_J: howto manager. (line 1624) +* BFD_RELOC_MMIX_GETA: howto manager. (line 1618) +* BFD_RELOC_MMIX_GETA_1: howto manager. (line 1619) +* BFD_RELOC_MMIX_GETA_2: howto manager. (line 1620) +* BFD_RELOC_MMIX_GETA_3: howto manager. (line 1621) +* BFD_RELOC_MMIX_JMP: howto manager. (line 1635) +* BFD_RELOC_MMIX_JMP_1: howto manager. (line 1636) +* BFD_RELOC_MMIX_JMP_2: howto manager. (line 1637) +* BFD_RELOC_MMIX_JMP_3: howto manager. (line 1638) +* BFD_RELOC_MMIX_LOCAL: howto manager. (line 1655) +* BFD_RELOC_MMIX_PUSHJ: howto manager. (line 1629) +* BFD_RELOC_MMIX_PUSHJ_1: howto manager. (line 1630) +* BFD_RELOC_MMIX_PUSHJ_2: howto manager. (line 1631) +* BFD_RELOC_MMIX_PUSHJ_3: howto manager. (line 1632) +* BFD_RELOC_MMIX_PUSHJ_STUBBABLE: howto manager. (line 1633) +* BFD_RELOC_MMIX_REG: howto manager. (line 1649) +* BFD_RELOC_MMIX_REG_OR_BYTE: howto manager. (line 1646) +* BFD_RELOC_MN10300_16_PCREL: howto manager. (line 517) +* BFD_RELOC_MN10300_32_PCREL: howto manager. (line 514) +* BFD_RELOC_MN10300_ALIGN: howto manager. (line 501) +* BFD_RELOC_MN10300_COPY: howto manager. (line 489) +* BFD_RELOC_MN10300_GLOB_DAT: howto manager. (line 491) +* BFD_RELOC_MN10300_GOT16: howto manager. (line 486) +* BFD_RELOC_MN10300_GOT24: howto manager. (line 483) +* BFD_RELOC_MN10300_GOT32: howto manager. (line 480) +* BFD_RELOC_MN10300_GOTOFF24: howto manager. (line 478) +* BFD_RELOC_MN10300_JMP_SLOT: howto manager. (line 493) +* BFD_RELOC_MN10300_RELATIVE: howto manager. (line 495) +* BFD_RELOC_MN10300_SYM_DIFF: howto manager. (line 497) +* BFD_RELOC_MN10300_TLS_DTPMOD: howto manager. (line 510) +* BFD_RELOC_MN10300_TLS_DTPOFF: howto manager. (line 511) +* BFD_RELOC_MN10300_TLS_GD: howto manager. (line 504) +* BFD_RELOC_MN10300_TLS_GOTIE: howto manager. (line 507) +* BFD_RELOC_MN10300_TLS_IE: howto manager. (line 508) +* BFD_RELOC_MN10300_TLS_LD: howto manager. (line 505) +* BFD_RELOC_MN10300_TLS_LDO: howto manager. (line 506) +* BFD_RELOC_MN10300_TLS_LE: howto manager. (line 509) +* BFD_RELOC_MN10300_TLS_TPOFF: howto manager. (line 512) +* BFD_RELOC_MOXIE_10_PCREL: howto manager. (line 431) +* BFD_RELOC_MSP430X_ABS16: howto manager. (line 2390) +* BFD_RELOC_MSP430X_ABS20_ADR_DST: howto manager. (line 2387) +* BFD_RELOC_MSP430X_ABS20_ADR_SRC: howto manager. (line 2386) +* BFD_RELOC_MSP430X_ABS20_EXT_DST: howto manager. (line 2384) +* BFD_RELOC_MSP430X_ABS20_EXT_ODST: howto manager. (line 2385) +* BFD_RELOC_MSP430X_ABS20_EXT_SRC: howto manager. (line 2383) +* BFD_RELOC_MSP430X_PCR16: howto manager. (line 2388) +* BFD_RELOC_MSP430X_PCR20_CALL: howto manager. (line 2389) +* BFD_RELOC_MSP430X_PCR20_EXT_DST: howto manager. (line 2381) +* BFD_RELOC_MSP430X_PCR20_EXT_ODST: howto manager. (line 2382) +* BFD_RELOC_MSP430X_PCR20_EXT_SRC: howto manager. (line 2380) +* BFD_RELOC_MSP430_10_PCREL: howto manager. (line 2372) +* BFD_RELOC_MSP430_16: howto manager. (line 2374) +* BFD_RELOC_MSP430_16_BYTE: howto manager. (line 2376) +* BFD_RELOC_MSP430_16_PCREL: howto manager. (line 2373) +* BFD_RELOC_MSP430_16_PCREL_BYTE: howto manager. (line 2375) +* BFD_RELOC_MSP430_2X_PCREL: howto manager. (line 2377) +* BFD_RELOC_MSP430_ABS8: howto manager. (line 2379) +* BFD_RELOC_MSP430_ABS_HI16: howto manager. (line 2391) +* BFD_RELOC_MSP430_PREL31: howto manager. (line 2392) +* BFD_RELOC_MSP430_RL_PCREL: howto manager. (line 2378) +* BFD_RELOC_MSP430_SYM_DIFF: howto manager. (line 2393) +* BFD_RELOC_MT_GNU_VTENTRY: howto manager. (line 2368) +* BFD_RELOC_MT_GNU_VTINHERIT: howto manager. (line 2366) +* BFD_RELOC_MT_HI16: howto manager. (line 2362) +* BFD_RELOC_MT_LO16: howto manager. (line 2364) +* BFD_RELOC_MT_PC16: howto manager. (line 2360) +* BFD_RELOC_MT_PCINSN8: howto manager. (line 2370) +* BFD_RELOC_NDS32_10IFCU_PCREL: howto manager. (line 1368) +* BFD_RELOC_NDS32_10_UPCREL: howto manager. (line 1339) +* BFD_RELOC_NDS32_15_FIXED: howto manager. (line 1300) +* BFD_RELOC_NDS32_15_PCREL: howto manager. (line 1226) +* BFD_RELOC_NDS32_17IFC_PCREL: howto manager. (line 1367) +* BFD_RELOC_NDS32_17_FIXED: howto manager. (line 1301) +* BFD_RELOC_NDS32_17_PCREL: howto manager. (line 1228) +* BFD_RELOC_NDS32_20: howto manager. (line 1218) +* BFD_RELOC_NDS32_25_ABS: howto manager. (line 1363) +* BFD_RELOC_NDS32_25_FIXED: howto manager. (line 1302) +* BFD_RELOC_NDS32_25_PCREL: howto manager. (line 1230) +* BFD_RELOC_NDS32_25_PLTREL: howto manager. (line 1276) +* BFD_RELOC_NDS32_5: howto manager. (line 1337) +* BFD_RELOC_NDS32_9_FIXED: howto manager. (line 1299) +* BFD_RELOC_NDS32_9_PCREL: howto manager. (line 1220) +* BFD_RELOC_NDS32_9_PLTREL: howto manager. (line 1275) +* BFD_RELOC_NDS32_COPY: howto manager. (line 1277) +* BFD_RELOC_NDS32_DATA: howto manager. (line 1365) +* BFD_RELOC_NDS32_DIFF16: howto manager. (line 1358) +* BFD_RELOC_NDS32_DIFF32: howto manager. (line 1359) +* BFD_RELOC_NDS32_DIFF8: howto manager. (line 1357) +* BFD_RELOC_NDS32_DIFF_ULEB128: howto manager. (line 1360) +* BFD_RELOC_NDS32_DWARF2_LEB: howto manager. (line 1323) +* BFD_RELOC_NDS32_DWARF2_OP1: howto manager. (line 1321) +* BFD_RELOC_NDS32_DWARF2_OP2: howto manager. (line 1322) +* BFD_RELOC_NDS32_EMPTY: howto manager. (line 1361) +* BFD_RELOC_NDS32_GLOB_DAT: howto manager. (line 1278) +* BFD_RELOC_NDS32_GOT15S2: howto manager. (line 1334) +* BFD_RELOC_NDS32_GOT17S2: howto manager. (line 1335) +* BFD_RELOC_NDS32_GOT20: howto manager. (line 1274) +* BFD_RELOC_NDS32_GOTOFF: howto manager. (line 1281) +* BFD_RELOC_NDS32_GOTOFF_HI20: howto manager. (line 1282) +* BFD_RELOC_NDS32_GOTOFF_LO12: howto manager. (line 1283) +* BFD_RELOC_NDS32_GOTOFF_LO15: howto manager. (line 1332) +* BFD_RELOC_NDS32_GOTOFF_LO19: howto manager. (line 1333) +* BFD_RELOC_NDS32_GOTOFF_SUFF: howto manager. (line 1346) +* BFD_RELOC_NDS32_GOTPC20: howto manager. (line 1284) +* BFD_RELOC_NDS32_GOTPC_HI20: howto manager. (line 1287) +* BFD_RELOC_NDS32_GOTPC_LO12: howto manager. (line 1288) +* BFD_RELOC_NDS32_GOTTPOFF: howto manager. (line 1375) +* BFD_RELOC_NDS32_GOT_HI20: howto manager. (line 1285) +* BFD_RELOC_NDS32_GOT_LO12: howto manager. (line 1286) +* BFD_RELOC_NDS32_GOT_LO15: howto manager. (line 1330) +* BFD_RELOC_NDS32_GOT_LO19: howto manager. (line 1331) +* BFD_RELOC_NDS32_GOT_SUFF: howto manager. (line 1345) +* BFD_RELOC_NDS32_HI20: howto manager. (line 1232) +* BFD_RELOC_NDS32_INSN16: howto manager. (line 1290) +* BFD_RELOC_NDS32_JMP_SLOT: howto manager. (line 1279) +* BFD_RELOC_NDS32_LABEL: howto manager. (line 1291) +* BFD_RELOC_NDS32_LO12S0: howto manager. (line 1244) +* BFD_RELOC_NDS32_LO12S0_ORI: howto manager. (line 1247) +* BFD_RELOC_NDS32_LO12S1: howto manager. (line 1241) +* BFD_RELOC_NDS32_LO12S2: howto manager. (line 1238) +* BFD_RELOC_NDS32_LO12S2_DP: howto manager. (line 1318) +* BFD_RELOC_NDS32_LO12S2_SP: howto manager. (line 1319) +* BFD_RELOC_NDS32_LO12S3: howto manager. (line 1235) +* BFD_RELOC_NDS32_LOADSTORE: howto manager. (line 1298) +* BFD_RELOC_NDS32_LONGCALL1: howto manager. (line 1292) +* BFD_RELOC_NDS32_LONGCALL2: howto manager. (line 1293) +* BFD_RELOC_NDS32_LONGCALL3: howto manager. (line 1294) +* BFD_RELOC_NDS32_LONGCALL4: howto manager. (line 1303) +* BFD_RELOC_NDS32_LONGCALL5: howto manager. (line 1304) +* BFD_RELOC_NDS32_LONGCALL6: howto manager. (line 1305) +* BFD_RELOC_NDS32_LONGJUMP1: howto manager. (line 1295) +* BFD_RELOC_NDS32_LONGJUMP2: howto manager. (line 1296) +* BFD_RELOC_NDS32_LONGJUMP3: howto manager. (line 1297) +* BFD_RELOC_NDS32_LONGJUMP4: howto manager. (line 1306) +* BFD_RELOC_NDS32_LONGJUMP5: howto manager. (line 1307) +* BFD_RELOC_NDS32_LONGJUMP6: howto manager. (line 1308) +* BFD_RELOC_NDS32_LONGJUMP7: howto manager. (line 1309) +* BFD_RELOC_NDS32_MINUEND: howto manager. (line 1355) +* BFD_RELOC_NDS32_MULCALL_SUFF: howto manager. (line 1348) +* BFD_RELOC_NDS32_PLTBLOCK: howto manager. (line 1352) +* BFD_RELOC_NDS32_PLTREL_HI20: howto manager. (line 1311) +* BFD_RELOC_NDS32_PLTREL_LO12: howto manager. (line 1312) +* BFD_RELOC_NDS32_PLT_GOTREL_HI20: howto manager. (line 1313) +* BFD_RELOC_NDS32_PLT_GOTREL_LO12: howto manager. (line 1314) +* BFD_RELOC_NDS32_PLT_GOTREL_LO15: howto manager. (line 1328) +* BFD_RELOC_NDS32_PLT_GOTREL_LO19: howto manager. (line 1329) +* BFD_RELOC_NDS32_PLT_GOTREL_LO20: howto manager. (line 1327) +* BFD_RELOC_NDS32_PLT_GOT_SUFF: howto manager. (line 1347) +* BFD_RELOC_NDS32_PTR: howto manager. (line 1349) +* BFD_RELOC_NDS32_PTR_COUNT: howto manager. (line 1350) +* BFD_RELOC_NDS32_PTR_RESOLVED: howto manager. (line 1351) +* BFD_RELOC_NDS32_RELATIVE: howto manager. (line 1280) +* BFD_RELOC_NDS32_RELAX_ENTRY: howto manager. (line 1344) +* BFD_RELOC_NDS32_RELAX_REGION_BEGIN: howto manager. (line 1353) +* BFD_RELOC_NDS32_RELAX_REGION_END: howto manager. (line 1354) +* BFD_RELOC_NDS32_SDA12S2_DP: howto manager. (line 1316) +* BFD_RELOC_NDS32_SDA12S2_SP: howto manager. (line 1317) +* BFD_RELOC_NDS32_SDA15S0: howto manager. (line 1259) +* BFD_RELOC_NDS32_SDA15S1: howto manager. (line 1256) +* BFD_RELOC_NDS32_SDA15S2: howto manager. (line 1253) +* BFD_RELOC_NDS32_SDA15S3: howto manager. (line 1250) +* BFD_RELOC_NDS32_SDA16S3: howto manager. (line 1262) +* BFD_RELOC_NDS32_SDA17S2: howto manager. (line 1265) +* BFD_RELOC_NDS32_SDA18S1: howto manager. (line 1268) +* BFD_RELOC_NDS32_SDA19S0: howto manager. (line 1271) +* BFD_RELOC_NDS32_SDA_FP7U2_RELA: howto manager. (line 1342) +* BFD_RELOC_NDS32_SUBTRAHEND: howto manager. (line 1356) +* BFD_RELOC_NDS32_TLS_IE_HI20: howto manager. (line 1376) +* BFD_RELOC_NDS32_TLS_IE_LO12S2: howto manager. (line 1377) +* BFD_RELOC_NDS32_TLS_LE_15S0: howto manager. (line 1380) +* BFD_RELOC_NDS32_TLS_LE_15S1: howto manager. (line 1381) +* BFD_RELOC_NDS32_TLS_LE_15S2: howto manager. (line 1382) +* BFD_RELOC_NDS32_TLS_LE_20: howto manager. (line 1379) +* BFD_RELOC_NDS32_TLS_LE_ADD: howto manager. (line 1373) +* BFD_RELOC_NDS32_TLS_LE_HI20: howto manager. (line 1371) +* BFD_RELOC_NDS32_TLS_LE_LO12: howto manager. (line 1372) +* BFD_RELOC_NDS32_TLS_LE_LS: howto manager. (line 1374) +* BFD_RELOC_NDS32_TLS_TPOFF: howto manager. (line 1378) +* BFD_RELOC_NDS32_TPOFF: howto manager. (line 1370) +* BFD_RELOC_NDS32_TRAN: howto manager. (line 1366) +* BFD_RELOC_NDS32_UPDATE_TA: howto manager. (line 1325) +* BFD_RELOC_NDS32_WORD_9_PCREL: howto manager. (line 1223) +* BFD_RELOC_NIOS2_ALIGN: howto manager. (line 2409) +* BFD_RELOC_NIOS2_CACHE_OPX: howto manager. (line 2399) +* BFD_RELOC_NIOS2_CALL16: howto manager. (line 2411) +* BFD_RELOC_NIOS2_CALL26: howto manager. (line 2397) +* BFD_RELOC_NIOS2_CALL26_NOAT: howto manager. (line 2429) +* BFD_RELOC_NIOS2_CALLR: howto manager. (line 2408) +* BFD_RELOC_NIOS2_CALL_HA: howto manager. (line 2433) +* BFD_RELOC_NIOS2_CALL_LO: howto manager. (line 2432) +* BFD_RELOC_NIOS2_CJMP: howto manager. (line 2407) +* BFD_RELOC_NIOS2_COPY: howto manager. (line 2424) +* BFD_RELOC_NIOS2_GLOB_DAT: howto manager. (line 2425) +* BFD_RELOC_NIOS2_GOT16: howto manager. (line 2410) +* BFD_RELOC_NIOS2_GOTOFF: howto manager. (line 2428) +* BFD_RELOC_NIOS2_GOTOFF_HA: howto manager. (line 2413) +* BFD_RELOC_NIOS2_GOTOFF_LO: howto manager. (line 2412) +* BFD_RELOC_NIOS2_GOT_HA: howto manager. (line 2431) +* BFD_RELOC_NIOS2_GOT_LO: howto manager. (line 2430) +* BFD_RELOC_NIOS2_GPREL: howto manager. (line 2405) +* BFD_RELOC_NIOS2_HI16: howto manager. (line 2402) +* BFD_RELOC_NIOS2_HIADJ16: howto manager. (line 2404) +* BFD_RELOC_NIOS2_IMM5: howto manager. (line 2398) +* BFD_RELOC_NIOS2_IMM6: howto manager. (line 2400) +* BFD_RELOC_NIOS2_IMM8: howto manager. (line 2401) +* BFD_RELOC_NIOS2_JUMP_SLOT: howto manager. (line 2426) +* BFD_RELOC_NIOS2_LO16: howto manager. (line 2403) +* BFD_RELOC_NIOS2_PCREL_HA: howto manager. (line 2415) +* BFD_RELOC_NIOS2_PCREL_LO: howto manager. (line 2414) +* BFD_RELOC_NIOS2_R2_F1I5_2: howto manager. (line 2443) +* BFD_RELOC_NIOS2_R2_I10_1_PCREL: howto manager. (line 2435) +* BFD_RELOC_NIOS2_R2_L5I4X1: howto manager. (line 2444) +* BFD_RELOC_NIOS2_R2_S12: howto manager. (line 2434) +* BFD_RELOC_NIOS2_R2_T1I7_1_PCREL: howto manager. (line 2436) +* BFD_RELOC_NIOS2_R2_T1I7_2: howto manager. (line 2437) +* BFD_RELOC_NIOS2_R2_T1X1I6: howto manager. (line 2445) +* BFD_RELOC_NIOS2_R2_T1X1I6_2: howto manager. (line 2446) +* BFD_RELOC_NIOS2_R2_T2I4: howto manager. (line 2438) +* BFD_RELOC_NIOS2_R2_T2I4_1: howto manager. (line 2439) +* BFD_RELOC_NIOS2_R2_T2I4_2: howto manager. (line 2440) +* BFD_RELOC_NIOS2_R2_X1I7_2: howto manager. (line 2441) +* BFD_RELOC_NIOS2_R2_X2L5: howto manager. (line 2442) +* BFD_RELOC_NIOS2_RELATIVE: howto manager. (line 2427) +* BFD_RELOC_NIOS2_S16: howto manager. (line 2395) +* BFD_RELOC_NIOS2_TLS_DTPMOD: howto manager. (line 2421) +* BFD_RELOC_NIOS2_TLS_DTPREL: howto manager. (line 2422) +* BFD_RELOC_NIOS2_TLS_GD16: howto manager. (line 2416) +* BFD_RELOC_NIOS2_TLS_IE16: howto manager. (line 2419) +* BFD_RELOC_NIOS2_TLS_LDM16: howto manager. (line 2417) +* BFD_RELOC_NIOS2_TLS_LDO16: howto manager. (line 2418) +* BFD_RELOC_NIOS2_TLS_LE16: howto manager. (line 2420) +* BFD_RELOC_NIOS2_TLS_TPREL: howto manager. (line 2423) +* BFD_RELOC_NIOS2_U16: howto manager. (line 2396) +* BFD_RELOC_NIOS2_UJMP: howto manager. (line 2406) * BFD_RELOC_NONE: howto manager. (line 122) -* BFD_RELOC_NS32K_DISP_16: howto manager. (line 583) -* BFD_RELOC_NS32K_DISP_16_PCREL: howto manager. (line 586) -* BFD_RELOC_NS32K_DISP_32: howto manager. (line 584) -* BFD_RELOC_NS32K_DISP_32_PCREL: howto manager. (line 587) -* BFD_RELOC_NS32K_DISP_8: howto manager. (line 582) -* BFD_RELOC_NS32K_DISP_8_PCREL: howto manager. (line 585) -* BFD_RELOC_NS32K_IMM_16: howto manager. (line 577) -* BFD_RELOC_NS32K_IMM_16_PCREL: howto manager. (line 580) -* BFD_RELOC_NS32K_IMM_32: howto manager. (line 578) -* BFD_RELOC_NS32K_IMM_32_PCREL: howto manager. (line 581) -* BFD_RELOC_NS32K_IMM_8: howto manager. (line 576) -* BFD_RELOC_NS32K_IMM_8_PCREL: howto manager. (line 579) -* BFD_RELOC_OR1K_COPY: howto manager. (line 2316) -* BFD_RELOC_OR1K_GLOB_DAT: howto manager. (line 2317) -* BFD_RELOC_OR1K_GOT16: howto manager. (line 2312) -* BFD_RELOC_OR1K_GOTOFF_HI16: howto manager. (line 2314) -* BFD_RELOC_OR1K_GOTOFF_LO16: howto manager. (line 2315) -* BFD_RELOC_OR1K_GOTPC_HI16: howto manager. (line 2310) -* BFD_RELOC_OR1K_GOTPC_LO16: howto manager. (line 2311) -* BFD_RELOC_OR1K_JMP_SLOT: howto manager. (line 2318) -* BFD_RELOC_OR1K_PLT26: howto manager. (line 2313) -* BFD_RELOC_OR1K_RELATIVE: howto manager. (line 2319) -* BFD_RELOC_OR1K_REL_26: howto manager. (line 2309) -* BFD_RELOC_OR1K_TLS_DTPMOD: howto manager. (line 2332) -* BFD_RELOC_OR1K_TLS_DTPOFF: howto manager. (line 2331) -* BFD_RELOC_OR1K_TLS_GD_HI16: howto manager. (line 2320) -* BFD_RELOC_OR1K_TLS_GD_LO16: howto manager. (line 2321) -* BFD_RELOC_OR1K_TLS_IE_HI16: howto manager. (line 2326) -* BFD_RELOC_OR1K_TLS_IE_LO16: howto manager. (line 2327) -* BFD_RELOC_OR1K_TLS_LDM_HI16: howto manager. (line 2322) -* BFD_RELOC_OR1K_TLS_LDM_LO16: howto manager. (line 2323) -* BFD_RELOC_OR1K_TLS_LDO_HI16: howto manager. (line 2324) -* BFD_RELOC_OR1K_TLS_LDO_LO16: howto manager. (line 2325) -* BFD_RELOC_OR1K_TLS_LE_HI16: howto manager. (line 2328) -* BFD_RELOC_OR1K_TLS_LE_LO16: howto manager. (line 2329) -* BFD_RELOC_OR1K_TLS_TPOFF: howto manager. (line 2330) -* BFD_RELOC_PDP11_DISP_6_PCREL: howto manager. (line 590) -* BFD_RELOC_PDP11_DISP_8_PCREL: howto manager. (line 589) -* BFD_RELOC_PJ_CODE_DIR16: howto manager. (line 594) -* BFD_RELOC_PJ_CODE_DIR32: howto manager. (line 595) -* BFD_RELOC_PJ_CODE_HI16: howto manager. (line 592) -* BFD_RELOC_PJ_CODE_LO16: howto manager. (line 593) -* BFD_RELOC_PJ_CODE_REL16: howto manager. (line 596) -* BFD_RELOC_PJ_CODE_REL32: howto manager. (line 597) -* BFD_RELOC_PPC64_ADDR16_DS: howto manager. (line 659) -* BFD_RELOC_PPC64_ADDR16_HIGH: howto manager. (line 670) -* BFD_RELOC_PPC64_ADDR16_HIGHA: howto manager. (line 671) -* BFD_RELOC_PPC64_ADDR16_LO_DS: howto manager. (line 660) -* BFD_RELOC_PPC64_ADDR64_LOCAL: howto manager. (line 672) -* BFD_RELOC_PPC64_DTPREL16_DS: howto manager. (line 711) -* BFD_RELOC_PPC64_DTPREL16_HIGH: howto manager. (line 719) -* BFD_RELOC_PPC64_DTPREL16_HIGHA: howto manager. (line 720) -* BFD_RELOC_PPC64_DTPREL16_HIGHER: howto manager. (line 713) -* BFD_RELOC_PPC64_DTPREL16_HIGHERA: howto manager. (line 714) -* BFD_RELOC_PPC64_DTPREL16_HIGHEST: howto manager. (line 715) -* BFD_RELOC_PPC64_DTPREL16_HIGHESTA: howto manager. (line 716) -* BFD_RELOC_PPC64_DTPREL16_LO_DS: howto manager. (line 712) -* BFD_RELOC_PPC64_ENTRY: howto manager. (line 673) -* BFD_RELOC_PPC64_GOT16_DS: howto manager. (line 661) -* BFD_RELOC_PPC64_GOT16_LO_DS: howto manager. (line 662) -* BFD_RELOC_PPC64_HIGHER: howto manager. (line 647) -* BFD_RELOC_PPC64_HIGHER_S: howto manager. (line 648) -* BFD_RELOC_PPC64_HIGHEST: howto manager. (line 649) -* BFD_RELOC_PPC64_HIGHEST_S: howto manager. (line 650) -* BFD_RELOC_PPC64_PLT16_LO_DS: howto manager. (line 663) -* BFD_RELOC_PPC64_PLTGOT16: howto manager. (line 655) -* BFD_RELOC_PPC64_PLTGOT16_DS: howto manager. (line 668) -* BFD_RELOC_PPC64_PLTGOT16_HA: howto manager. (line 658) -* BFD_RELOC_PPC64_PLTGOT16_HI: howto manager. (line 657) -* BFD_RELOC_PPC64_PLTGOT16_LO: howto manager. (line 656) -* BFD_RELOC_PPC64_PLTGOT16_LO_DS: howto manager. (line 669) -* BFD_RELOC_PPC64_SECTOFF_DS: howto manager. (line 664) -* BFD_RELOC_PPC64_SECTOFF_LO_DS: howto manager. (line 665) -* BFD_RELOC_PPC64_TOC: howto manager. (line 654) -* BFD_RELOC_PPC64_TOC16_DS: howto manager. (line 666) -* BFD_RELOC_PPC64_TOC16_HA: howto manager. (line 653) -* BFD_RELOC_PPC64_TOC16_HI: howto manager. (line 652) -* BFD_RELOC_PPC64_TOC16_LO: howto manager. (line 651) -* BFD_RELOC_PPC64_TOC16_LO_DS: howto manager. (line 667) -* BFD_RELOC_PPC64_TPREL16_DS: howto manager. (line 705) -* BFD_RELOC_PPC64_TPREL16_HIGH: howto manager. (line 717) -* BFD_RELOC_PPC64_TPREL16_HIGHA: howto manager. (line 718) -* BFD_RELOC_PPC64_TPREL16_HIGHER: howto manager. (line 707) -* BFD_RELOC_PPC64_TPREL16_HIGHERA: howto manager. (line 708) -* BFD_RELOC_PPC64_TPREL16_HIGHEST: howto manager. (line 709) -* BFD_RELOC_PPC64_TPREL16_HIGHESTA: howto manager. (line 710) -* BFD_RELOC_PPC64_TPREL16_LO_DS: howto manager. (line 706) -* BFD_RELOC_PPC_B16: howto manager. (line 602) -* BFD_RELOC_PPC_B16_BRNTAKEN: howto manager. (line 604) -* BFD_RELOC_PPC_B16_BRTAKEN: howto manager. (line 603) -* BFD_RELOC_PPC_B26: howto manager. (line 599) -* BFD_RELOC_PPC_BA16: howto manager. (line 605) -* BFD_RELOC_PPC_BA16_BRNTAKEN: howto manager. (line 607) -* BFD_RELOC_PPC_BA16_BRTAKEN: howto manager. (line 606) -* BFD_RELOC_PPC_BA26: howto manager. (line 600) -* BFD_RELOC_PPC_COPY: howto manager. (line 608) -* BFD_RELOC_PPC_DTPMOD: howto manager. (line 678) -* BFD_RELOC_PPC_DTPREL: howto manager. (line 688) -* BFD_RELOC_PPC_DTPREL16: howto manager. (line 684) -* BFD_RELOC_PPC_DTPREL16_HA: howto manager. (line 687) -* BFD_RELOC_PPC_DTPREL16_HI: howto manager. (line 686) -* BFD_RELOC_PPC_DTPREL16_LO: howto manager. (line 685) -* BFD_RELOC_PPC_EMB_BIT_FLD: howto manager. (line 627) -* BFD_RELOC_PPC_EMB_MRKREF: howto manager. (line 622) -* BFD_RELOC_PPC_EMB_NADDR16: howto manager. (line 614) -* BFD_RELOC_PPC_EMB_NADDR16_HA: howto manager. (line 617) -* BFD_RELOC_PPC_EMB_NADDR16_HI: howto manager. (line 616) -* BFD_RELOC_PPC_EMB_NADDR16_LO: howto manager. (line 615) -* BFD_RELOC_PPC_EMB_NADDR32: howto manager. (line 613) -* BFD_RELOC_PPC_EMB_RELSDA: howto manager. (line 628) -* BFD_RELOC_PPC_EMB_RELSEC16: howto manager. (line 623) -* BFD_RELOC_PPC_EMB_RELST_HA: howto manager. (line 626) -* BFD_RELOC_PPC_EMB_RELST_HI: howto manager. (line 625) -* BFD_RELOC_PPC_EMB_RELST_LO: howto manager. (line 624) -* BFD_RELOC_PPC_EMB_SDA21: howto manager. (line 621) -* BFD_RELOC_PPC_EMB_SDA2I16: howto manager. (line 619) -* BFD_RELOC_PPC_EMB_SDA2REL: howto manager. (line 620) -* BFD_RELOC_PPC_EMB_SDAI16: howto manager. (line 618) -* BFD_RELOC_PPC_GLOB_DAT: howto manager. (line 609) -* BFD_RELOC_PPC_GOT_DTPREL16: howto manager. (line 701) -* BFD_RELOC_PPC_GOT_DTPREL16_HA: howto manager. (line 704) -* BFD_RELOC_PPC_GOT_DTPREL16_HI: howto manager. (line 703) -* BFD_RELOC_PPC_GOT_DTPREL16_LO: howto manager. (line 702) -* BFD_RELOC_PPC_GOT_TLSGD16: howto manager. (line 689) -* BFD_RELOC_PPC_GOT_TLSGD16_HA: howto manager. (line 692) -* BFD_RELOC_PPC_GOT_TLSGD16_HI: howto manager. (line 691) -* BFD_RELOC_PPC_GOT_TLSGD16_LO: howto manager. (line 690) -* BFD_RELOC_PPC_GOT_TLSLD16: howto manager. (line 693) -* BFD_RELOC_PPC_GOT_TLSLD16_HA: howto manager. (line 696) -* BFD_RELOC_PPC_GOT_TLSLD16_HI: howto manager. (line 695) -* BFD_RELOC_PPC_GOT_TLSLD16_LO: howto manager. (line 694) -* BFD_RELOC_PPC_GOT_TPREL16: howto manager. (line 697) -* BFD_RELOC_PPC_GOT_TPREL16_HA: howto manager. (line 700) -* BFD_RELOC_PPC_GOT_TPREL16_HI: howto manager. (line 699) -* BFD_RELOC_PPC_GOT_TPREL16_LO: howto manager. (line 698) -* BFD_RELOC_PPC_JMP_SLOT: howto manager. (line 610) -* BFD_RELOC_PPC_LOCAL24PC: howto manager. (line 612) -* BFD_RELOC_PPC_REL16DX_HA: howto manager. (line 646) -* BFD_RELOC_PPC_RELATIVE: howto manager. (line 611) -* BFD_RELOC_PPC_TLS: howto manager. (line 675) -* BFD_RELOC_PPC_TLSGD: howto manager. (line 676) -* BFD_RELOC_PPC_TLSLD: howto manager. (line 677) -* BFD_RELOC_PPC_TOC16: howto manager. (line 601) -* BFD_RELOC_PPC_TPREL: howto manager. (line 683) -* BFD_RELOC_PPC_TPREL16: howto manager. (line 679) -* BFD_RELOC_PPC_TPREL16_HA: howto manager. (line 682) -* BFD_RELOC_PPC_TPREL16_HI: howto manager. (line 681) -* BFD_RELOC_PPC_TPREL16_LO: howto manager. (line 680) -* BFD_RELOC_PPC_VLE_HA16A: howto manager. (line 636) -* BFD_RELOC_PPC_VLE_HA16D: howto manager. (line 637) -* BFD_RELOC_PPC_VLE_HI16A: howto manager. (line 634) -* BFD_RELOC_PPC_VLE_HI16D: howto manager. (line 635) -* BFD_RELOC_PPC_VLE_LO16A: howto manager. (line 632) -* BFD_RELOC_PPC_VLE_LO16D: howto manager. (line 633) -* BFD_RELOC_PPC_VLE_REL15: howto manager. (line 630) -* BFD_RELOC_PPC_VLE_REL24: howto manager. (line 631) -* BFD_RELOC_PPC_VLE_REL8: howto manager. (line 629) -* BFD_RELOC_PPC_VLE_SDA21: howto manager. (line 638) -* BFD_RELOC_PPC_VLE_SDA21_LO: howto manager. (line 639) -* BFD_RELOC_PPC_VLE_SDAREL_HA16A: howto manager. (line 644) -* BFD_RELOC_PPC_VLE_SDAREL_HA16D: howto manager. (line 645) -* BFD_RELOC_PPC_VLE_SDAREL_HI16A: howto manager. (line 642) -* BFD_RELOC_PPC_VLE_SDAREL_HI16D: howto manager. (line 643) -* BFD_RELOC_PPC_VLE_SDAREL_LO16A: howto manager. (line 640) -* BFD_RELOC_PPC_VLE_SDAREL_LO16D: howto manager. (line 641) -* BFD_RELOC_RELC: howto manager. (line 2346) -* BFD_RELOC_RL78_16U: howto manager. (line 1770) -* BFD_RELOC_RL78_16_OP: howto manager. (line 1766) -* BFD_RELOC_RL78_24U: howto manager. (line 1771) -* BFD_RELOC_RL78_24_OP: howto manager. (line 1767) -* BFD_RELOC_RL78_32_OP: howto manager. (line 1768) -* BFD_RELOC_RL78_8U: howto manager. (line 1769) -* BFD_RELOC_RL78_ABS16: howto manager. (line 1783) -* BFD_RELOC_RL78_ABS16U: howto manager. (line 1787) -* BFD_RELOC_RL78_ABS16UL: howto manager. (line 1789) -* BFD_RELOC_RL78_ABS16UW: howto manager. (line 1788) -* BFD_RELOC_RL78_ABS16_REV: howto manager. (line 1784) -* BFD_RELOC_RL78_ABS32: howto manager. (line 1785) -* BFD_RELOC_RL78_ABS32_REV: howto manager. (line 1786) -* BFD_RELOC_RL78_ABS8: howto manager. (line 1782) -* BFD_RELOC_RL78_CODE: howto manager. (line 1794) -* BFD_RELOC_RL78_DIFF: howto manager. (line 1773) -* BFD_RELOC_RL78_DIR3U_PCREL: howto manager. (line 1772) -* BFD_RELOC_RL78_GPRELB: howto manager. (line 1774) -* BFD_RELOC_RL78_GPRELL: howto manager. (line 1776) -* BFD_RELOC_RL78_GPRELW: howto manager. (line 1775) -* BFD_RELOC_RL78_HI16: howto manager. (line 1791) -* BFD_RELOC_RL78_HI8: howto manager. (line 1792) -* BFD_RELOC_RL78_LO16: howto manager. (line 1793) -* BFD_RELOC_RL78_NEG16: howto manager. (line 1763) -* BFD_RELOC_RL78_NEG24: howto manager. (line 1764) -* BFD_RELOC_RL78_NEG32: howto manager. (line 1765) -* BFD_RELOC_RL78_NEG8: howto manager. (line 1762) -* BFD_RELOC_RL78_OP_AND: howto manager. (line 1780) -* BFD_RELOC_RL78_OP_NEG: howto manager. (line 1779) -* BFD_RELOC_RL78_OP_SHRA: howto manager. (line 1781) -* BFD_RELOC_RL78_OP_SUBTRACT: howto manager. (line 1778) -* BFD_RELOC_RL78_RELAX: howto manager. (line 1790) -* BFD_RELOC_RL78_SADDR: howto manager. (line 1795) -* BFD_RELOC_RL78_SYM: howto manager. (line 1777) +* BFD_RELOC_NS32K_DISP_16: howto manager. (line 585) +* BFD_RELOC_NS32K_DISP_16_PCREL: howto manager. (line 588) +* BFD_RELOC_NS32K_DISP_32: howto manager. (line 586) +* BFD_RELOC_NS32K_DISP_32_PCREL: howto manager. (line 589) +* BFD_RELOC_NS32K_DISP_8: howto manager. (line 584) +* BFD_RELOC_NS32K_DISP_8_PCREL: howto manager. (line 587) +* BFD_RELOC_NS32K_IMM_16: howto manager. (line 579) +* BFD_RELOC_NS32K_IMM_16_PCREL: howto manager. (line 582) +* BFD_RELOC_NS32K_IMM_32: howto manager. (line 580) +* BFD_RELOC_NS32K_IMM_32_PCREL: howto manager. (line 583) +* BFD_RELOC_NS32K_IMM_8: howto manager. (line 578) +* BFD_RELOC_NS32K_IMM_8_PCREL: howto manager. (line 581) +* BFD_RELOC_OR1K_COPY: howto manager. (line 2319) +* BFD_RELOC_OR1K_GLOB_DAT: howto manager. (line 2320) +* BFD_RELOC_OR1K_GOT16: howto manager. (line 2315) +* BFD_RELOC_OR1K_GOTOFF_HI16: howto manager. (line 2317) +* BFD_RELOC_OR1K_GOTOFF_LO16: howto manager. (line 2318) +* BFD_RELOC_OR1K_GOTPC_HI16: howto manager. (line 2313) +* BFD_RELOC_OR1K_GOTPC_LO16: howto manager. (line 2314) +* BFD_RELOC_OR1K_JMP_SLOT: howto manager. (line 2321) +* BFD_RELOC_OR1K_PLT26: howto manager. (line 2316) +* BFD_RELOC_OR1K_RELATIVE: howto manager. (line 2322) +* BFD_RELOC_OR1K_REL_26: howto manager. (line 2312) +* BFD_RELOC_OR1K_TLS_DTPMOD: howto manager. (line 2335) +* BFD_RELOC_OR1K_TLS_DTPOFF: howto manager. (line 2334) +* BFD_RELOC_OR1K_TLS_GD_HI16: howto manager. (line 2323) +* BFD_RELOC_OR1K_TLS_GD_LO16: howto manager. (line 2324) +* BFD_RELOC_OR1K_TLS_IE_HI16: howto manager. (line 2329) +* BFD_RELOC_OR1K_TLS_IE_LO16: howto manager. (line 2330) +* BFD_RELOC_OR1K_TLS_LDM_HI16: howto manager. (line 2325) +* BFD_RELOC_OR1K_TLS_LDM_LO16: howto manager. (line 2326) +* BFD_RELOC_OR1K_TLS_LDO_HI16: howto manager. (line 2327) +* BFD_RELOC_OR1K_TLS_LDO_LO16: howto manager. (line 2328) +* BFD_RELOC_OR1K_TLS_LE_HI16: howto manager. (line 2331) +* BFD_RELOC_OR1K_TLS_LE_LO16: howto manager. (line 2332) +* BFD_RELOC_OR1K_TLS_TPOFF: howto manager. (line 2333) +* BFD_RELOC_PDP11_DISP_6_PCREL: howto manager. (line 592) +* BFD_RELOC_PDP11_DISP_8_PCREL: howto manager. (line 591) +* BFD_RELOC_PJ_CODE_DIR16: howto manager. (line 596) +* BFD_RELOC_PJ_CODE_DIR32: howto manager. (line 597) +* BFD_RELOC_PJ_CODE_HI16: howto manager. (line 594) +* BFD_RELOC_PJ_CODE_LO16: howto manager. (line 595) +* BFD_RELOC_PJ_CODE_REL16: howto manager. (line 598) +* BFD_RELOC_PJ_CODE_REL32: howto manager. (line 599) +* BFD_RELOC_PPC64_ADDR16_DS: howto manager. (line 661) +* BFD_RELOC_PPC64_ADDR16_HIGH: howto manager. (line 672) +* BFD_RELOC_PPC64_ADDR16_HIGHA: howto manager. (line 673) +* BFD_RELOC_PPC64_ADDR16_LO_DS: howto manager. (line 662) +* BFD_RELOC_PPC64_ADDR64_LOCAL: howto manager. (line 674) +* BFD_RELOC_PPC64_DTPREL16_DS: howto manager. (line 713) +* BFD_RELOC_PPC64_DTPREL16_HIGH: howto manager. (line 721) +* BFD_RELOC_PPC64_DTPREL16_HIGHA: howto manager. (line 722) +* BFD_RELOC_PPC64_DTPREL16_HIGHER: howto manager. (line 715) +* BFD_RELOC_PPC64_DTPREL16_HIGHERA: howto manager. (line 716) +* BFD_RELOC_PPC64_DTPREL16_HIGHEST: howto manager. (line 717) +* BFD_RELOC_PPC64_DTPREL16_HIGHESTA: howto manager. (line 718) +* BFD_RELOC_PPC64_DTPREL16_LO_DS: howto manager. (line 714) +* BFD_RELOC_PPC64_ENTRY: howto manager. (line 675) +* BFD_RELOC_PPC64_GOT16_DS: howto manager. (line 663) +* BFD_RELOC_PPC64_GOT16_LO_DS: howto manager. (line 664) +* BFD_RELOC_PPC64_HIGHER: howto manager. (line 649) +* BFD_RELOC_PPC64_HIGHER_S: howto manager. (line 650) +* BFD_RELOC_PPC64_HIGHEST: howto manager. (line 651) +* BFD_RELOC_PPC64_HIGHEST_S: howto manager. (line 652) +* BFD_RELOC_PPC64_PLT16_LO_DS: howto manager. (line 665) +* BFD_RELOC_PPC64_PLTGOT16: howto manager. (line 657) +* BFD_RELOC_PPC64_PLTGOT16_DS: howto manager. (line 670) +* BFD_RELOC_PPC64_PLTGOT16_HA: howto manager. (line 660) +* BFD_RELOC_PPC64_PLTGOT16_HI: howto manager. (line 659) +* BFD_RELOC_PPC64_PLTGOT16_LO: howto manager. (line 658) +* BFD_RELOC_PPC64_PLTGOT16_LO_DS: howto manager. (line 671) +* BFD_RELOC_PPC64_SECTOFF_DS: howto manager. (line 666) +* BFD_RELOC_PPC64_SECTOFF_LO_DS: howto manager. (line 667) +* BFD_RELOC_PPC64_TOC: howto manager. (line 656) +* BFD_RELOC_PPC64_TOC16_DS: howto manager. (line 668) +* BFD_RELOC_PPC64_TOC16_HA: howto manager. (line 655) +* BFD_RELOC_PPC64_TOC16_HI: howto manager. (line 654) +* BFD_RELOC_PPC64_TOC16_LO: howto manager. (line 653) +* BFD_RELOC_PPC64_TOC16_LO_DS: howto manager. (line 669) +* BFD_RELOC_PPC64_TPREL16_DS: howto manager. (line 707) +* BFD_RELOC_PPC64_TPREL16_HIGH: howto manager. (line 719) +* BFD_RELOC_PPC64_TPREL16_HIGHA: howto manager. (line 720) +* BFD_RELOC_PPC64_TPREL16_HIGHER: howto manager. (line 709) +* BFD_RELOC_PPC64_TPREL16_HIGHERA: howto manager. (line 710) +* BFD_RELOC_PPC64_TPREL16_HIGHEST: howto manager. (line 711) +* BFD_RELOC_PPC64_TPREL16_HIGHESTA: howto manager. (line 712) +* BFD_RELOC_PPC64_TPREL16_LO_DS: howto manager. (line 708) +* BFD_RELOC_PPC_B16: howto manager. (line 604) +* BFD_RELOC_PPC_B16_BRNTAKEN: howto manager. (line 606) +* BFD_RELOC_PPC_B16_BRTAKEN: howto manager. (line 605) +* BFD_RELOC_PPC_B26: howto manager. (line 601) +* BFD_RELOC_PPC_BA16: howto manager. (line 607) +* BFD_RELOC_PPC_BA16_BRNTAKEN: howto manager. (line 609) +* BFD_RELOC_PPC_BA16_BRTAKEN: howto manager. (line 608) +* BFD_RELOC_PPC_BA26: howto manager. (line 602) +* BFD_RELOC_PPC_COPY: howto manager. (line 610) +* BFD_RELOC_PPC_DTPMOD: howto manager. (line 680) +* BFD_RELOC_PPC_DTPREL: howto manager. (line 690) +* BFD_RELOC_PPC_DTPREL16: howto manager. (line 686) +* BFD_RELOC_PPC_DTPREL16_HA: howto manager. (line 689) +* BFD_RELOC_PPC_DTPREL16_HI: howto manager. (line 688) +* BFD_RELOC_PPC_DTPREL16_LO: howto manager. (line 687) +* BFD_RELOC_PPC_EMB_BIT_FLD: howto manager. (line 629) +* BFD_RELOC_PPC_EMB_MRKREF: howto manager. (line 624) +* BFD_RELOC_PPC_EMB_NADDR16: howto manager. (line 616) +* BFD_RELOC_PPC_EMB_NADDR16_HA: howto manager. (line 619) +* BFD_RELOC_PPC_EMB_NADDR16_HI: howto manager. (line 618) +* BFD_RELOC_PPC_EMB_NADDR16_LO: howto manager. (line 617) +* BFD_RELOC_PPC_EMB_NADDR32: howto manager. (line 615) +* BFD_RELOC_PPC_EMB_RELSDA: howto manager. (line 630) +* BFD_RELOC_PPC_EMB_RELSEC16: howto manager. (line 625) +* BFD_RELOC_PPC_EMB_RELST_HA: howto manager. (line 628) +* BFD_RELOC_PPC_EMB_RELST_HI: howto manager. (line 627) +* BFD_RELOC_PPC_EMB_RELST_LO: howto manager. (line 626) +* BFD_RELOC_PPC_EMB_SDA21: howto manager. (line 623) +* BFD_RELOC_PPC_EMB_SDA2I16: howto manager. (line 621) +* BFD_RELOC_PPC_EMB_SDA2REL: howto manager. (line 622) +* BFD_RELOC_PPC_EMB_SDAI16: howto manager. (line 620) +* BFD_RELOC_PPC_GLOB_DAT: howto manager. (line 611) +* BFD_RELOC_PPC_GOT_DTPREL16: howto manager. (line 703) +* BFD_RELOC_PPC_GOT_DTPREL16_HA: howto manager. (line 706) +* BFD_RELOC_PPC_GOT_DTPREL16_HI: howto manager. (line 705) +* BFD_RELOC_PPC_GOT_DTPREL16_LO: howto manager. (line 704) +* BFD_RELOC_PPC_GOT_TLSGD16: howto manager. (line 691) +* BFD_RELOC_PPC_GOT_TLSGD16_HA: howto manager. (line 694) +* BFD_RELOC_PPC_GOT_TLSGD16_HI: howto manager. (line 693) +* BFD_RELOC_PPC_GOT_TLSGD16_LO: howto manager. (line 692) +* BFD_RELOC_PPC_GOT_TLSLD16: howto manager. (line 695) +* BFD_RELOC_PPC_GOT_TLSLD16_HA: howto manager. (line 698) +* BFD_RELOC_PPC_GOT_TLSLD16_HI: howto manager. (line 697) +* BFD_RELOC_PPC_GOT_TLSLD16_LO: howto manager. (line 696) +* BFD_RELOC_PPC_GOT_TPREL16: howto manager. (line 699) +* BFD_RELOC_PPC_GOT_TPREL16_HA: howto manager. (line 702) +* BFD_RELOC_PPC_GOT_TPREL16_HI: howto manager. (line 701) +* BFD_RELOC_PPC_GOT_TPREL16_LO: howto manager. (line 700) +* BFD_RELOC_PPC_JMP_SLOT: howto manager. (line 612) +* BFD_RELOC_PPC_LOCAL24PC: howto manager. (line 614) +* BFD_RELOC_PPC_REL16DX_HA: howto manager. (line 648) +* BFD_RELOC_PPC_RELATIVE: howto manager. (line 613) +* BFD_RELOC_PPC_TLS: howto manager. (line 677) +* BFD_RELOC_PPC_TLSGD: howto manager. (line 678) +* BFD_RELOC_PPC_TLSLD: howto manager. (line 679) +* BFD_RELOC_PPC_TOC16: howto manager. (line 603) +* BFD_RELOC_PPC_TPREL: howto manager. (line 685) +* BFD_RELOC_PPC_TPREL16: howto manager. (line 681) +* BFD_RELOC_PPC_TPREL16_HA: howto manager. (line 684) +* BFD_RELOC_PPC_TPREL16_HI: howto manager. (line 683) +* BFD_RELOC_PPC_TPREL16_LO: howto manager. (line 682) +* BFD_RELOC_PPC_VLE_HA16A: howto manager. (line 638) +* BFD_RELOC_PPC_VLE_HA16D: howto manager. (line 639) +* BFD_RELOC_PPC_VLE_HI16A: howto manager. (line 636) +* BFD_RELOC_PPC_VLE_HI16D: howto manager. (line 637) +* BFD_RELOC_PPC_VLE_LO16A: howto manager. (line 634) +* BFD_RELOC_PPC_VLE_LO16D: howto manager. (line 635) +* BFD_RELOC_PPC_VLE_REL15: howto manager. (line 632) +* BFD_RELOC_PPC_VLE_REL24: howto manager. (line 633) +* BFD_RELOC_PPC_VLE_REL8: howto manager. (line 631) +* BFD_RELOC_PPC_VLE_SDA21: howto manager. (line 640) +* BFD_RELOC_PPC_VLE_SDA21_LO: howto manager. (line 641) +* BFD_RELOC_PPC_VLE_SDAREL_HA16A: howto manager. (line 646) +* BFD_RELOC_PPC_VLE_SDAREL_HA16D: howto manager. (line 647) +* BFD_RELOC_PPC_VLE_SDAREL_HI16A: howto manager. (line 644) +* BFD_RELOC_PPC_VLE_SDAREL_HI16D: howto manager. (line 645) +* BFD_RELOC_PPC_VLE_SDAREL_LO16A: howto manager. (line 642) +* BFD_RELOC_PPC_VLE_SDAREL_LO16D: howto manager. (line 643) +* BFD_RELOC_RELC: howto manager. (line 2349) +* BFD_RELOC_RL78_16U: howto manager. (line 1773) +* BFD_RELOC_RL78_16_OP: howto manager. (line 1769) +* BFD_RELOC_RL78_24U: howto manager. (line 1774) +* BFD_RELOC_RL78_24_OP: howto manager. (line 1770) +* BFD_RELOC_RL78_32_OP: howto manager. (line 1771) +* BFD_RELOC_RL78_8U: howto manager. (line 1772) +* BFD_RELOC_RL78_ABS16: howto manager. (line 1786) +* BFD_RELOC_RL78_ABS16U: howto manager. (line 1790) +* BFD_RELOC_RL78_ABS16UL: howto manager. (line 1792) +* BFD_RELOC_RL78_ABS16UW: howto manager. (line 1791) +* BFD_RELOC_RL78_ABS16_REV: howto manager. (line 1787) +* BFD_RELOC_RL78_ABS32: howto manager. (line 1788) +* BFD_RELOC_RL78_ABS32_REV: howto manager. (line 1789) +* BFD_RELOC_RL78_ABS8: howto manager. (line 1785) +* BFD_RELOC_RL78_CODE: howto manager. (line 1797) +* BFD_RELOC_RL78_DIFF: howto manager. (line 1776) +* BFD_RELOC_RL78_DIR3U_PCREL: howto manager. (line 1775) +* BFD_RELOC_RL78_GPRELB: howto manager. (line 1777) +* BFD_RELOC_RL78_GPRELL: howto manager. (line 1779) +* BFD_RELOC_RL78_GPRELW: howto manager. (line 1778) +* BFD_RELOC_RL78_HI16: howto manager. (line 1794) +* BFD_RELOC_RL78_HI8: howto manager. (line 1795) +* BFD_RELOC_RL78_LO16: howto manager. (line 1796) +* BFD_RELOC_RL78_NEG16: howto manager. (line 1766) +* BFD_RELOC_RL78_NEG24: howto manager. (line 1767) +* BFD_RELOC_RL78_NEG32: howto manager. (line 1768) +* BFD_RELOC_RL78_NEG8: howto manager. (line 1765) +* BFD_RELOC_RL78_OP_AND: howto manager. (line 1783) +* BFD_RELOC_RL78_OP_NEG: howto manager. (line 1782) +* BFD_RELOC_RL78_OP_SHRA: howto manager. (line 1784) +* BFD_RELOC_RL78_OP_SUBTRACT: howto manager. (line 1781) +* BFD_RELOC_RL78_RELAX: howto manager. (line 1793) +* BFD_RELOC_RL78_SADDR: howto manager. (line 1798) +* BFD_RELOC_RL78_SYM: howto manager. (line 1780) * BFD_RELOC_RVA: howto manager. (line 97) -* BFD_RELOC_RX_16U: howto manager. (line 1805) -* BFD_RELOC_RX_16_OP: howto manager. (line 1801) -* BFD_RELOC_RX_24U: howto manager. (line 1806) -* BFD_RELOC_RX_24_OP: howto manager. (line 1802) -* BFD_RELOC_RX_32_OP: howto manager. (line 1803) -* BFD_RELOC_RX_8U: howto manager. (line 1804) -* BFD_RELOC_RX_ABS16: howto manager. (line 1816) -* BFD_RELOC_RX_ABS16U: howto manager. (line 1820) -* BFD_RELOC_RX_ABS16UL: howto manager. (line 1822) -* BFD_RELOC_RX_ABS16UW: howto manager. (line 1821) -* BFD_RELOC_RX_ABS16_REV: howto manager. (line 1817) -* BFD_RELOC_RX_ABS32: howto manager. (line 1818) -* BFD_RELOC_RX_ABS32_REV: howto manager. (line 1819) -* BFD_RELOC_RX_ABS8: howto manager. (line 1815) -* BFD_RELOC_RX_DIFF: howto manager. (line 1808) -* BFD_RELOC_RX_DIR3U_PCREL: howto manager. (line 1807) -* BFD_RELOC_RX_GPRELB: howto manager. (line 1809) -* BFD_RELOC_RX_GPRELL: howto manager. (line 1811) -* BFD_RELOC_RX_GPRELW: howto manager. (line 1810) -* BFD_RELOC_RX_NEG16: howto manager. (line 1798) -* BFD_RELOC_RX_NEG24: howto manager. (line 1799) -* BFD_RELOC_RX_NEG32: howto manager. (line 1800) -* BFD_RELOC_RX_NEG8: howto manager. (line 1797) -* BFD_RELOC_RX_OP_NEG: howto manager. (line 1814) -* BFD_RELOC_RX_OP_SUBTRACT: howto manager. (line 1813) -* BFD_RELOC_RX_RELAX: howto manager. (line 1823) -* BFD_RELOC_RX_SYM: howto manager. (line 1812) -* BFD_RELOC_SCORE16_BRANCH: howto manager. (line 1926) -* BFD_RELOC_SCORE16_JMP: howto manager. (line 1924) -* BFD_RELOC_SCORE_BCMP: howto manager. (line 1928) -* BFD_RELOC_SCORE_BRANCH: howto manager. (line 1918) -* BFD_RELOC_SCORE_CALL15: howto manager. (line 1932) -* BFD_RELOC_SCORE_DUMMY2: howto manager. (line 1915) -* BFD_RELOC_SCORE_DUMMY_HI16: howto manager. (line 1933) -* BFD_RELOC_SCORE_GOT15: howto manager. (line 1930) -* BFD_RELOC_SCORE_GOT_LO16: howto manager. (line 1931) -* BFD_RELOC_SCORE_GPREL15: howto manager. (line 1913) -* BFD_RELOC_SCORE_IMM30: howto manager. (line 1920) -* BFD_RELOC_SCORE_IMM32: howto manager. (line 1922) -* BFD_RELOC_SCORE_JMP: howto manager. (line 1916) -* BFD_RELOC_SH_ALIGN: howto manager. (line 896) -* BFD_RELOC_SH_CODE: howto manager. (line 897) -* BFD_RELOC_SH_COPY: howto manager. (line 902) -* BFD_RELOC_SH_COPY64: howto manager. (line 927) -* BFD_RELOC_SH_COUNT: howto manager. (line 895) -* BFD_RELOC_SH_DATA: howto manager. (line 898) -* BFD_RELOC_SH_DISP12: howto manager. (line 878) -* BFD_RELOC_SH_DISP12BY2: howto manager. (line 879) -* BFD_RELOC_SH_DISP12BY4: howto manager. (line 880) -* BFD_RELOC_SH_DISP12BY8: howto manager. (line 881) -* BFD_RELOC_SH_DISP20: howto manager. (line 882) -* BFD_RELOC_SH_DISP20BY8: howto manager. (line 883) -* BFD_RELOC_SH_FUNCDESC: howto manager. (line 970) -* BFD_RELOC_SH_GLOB_DAT: howto manager. (line 903) -* BFD_RELOC_SH_GLOB_DAT64: howto manager. (line 928) -* BFD_RELOC_SH_GOT10BY4: howto manager. (line 931) -* BFD_RELOC_SH_GOT10BY8: howto manager. (line 932) -* BFD_RELOC_SH_GOT20: howto manager. (line 964) -* BFD_RELOC_SH_GOTFUNCDESC: howto manager. (line 966) -* BFD_RELOC_SH_GOTFUNCDESC20: howto manager. (line 967) -* BFD_RELOC_SH_GOTOFF20: howto manager. (line 965) -* BFD_RELOC_SH_GOTOFFFUNCDESC: howto manager. (line 968) -* BFD_RELOC_SH_GOTOFFFUNCDESC20: howto manager. (line 969) -* BFD_RELOC_SH_GOTOFF_HI16: howto manager. (line 922) -* BFD_RELOC_SH_GOTOFF_LOW16: howto manager. (line 919) -* BFD_RELOC_SH_GOTOFF_MEDHI16: howto manager. (line 921) -* BFD_RELOC_SH_GOTOFF_MEDLOW16: howto manager. (line 920) -* BFD_RELOC_SH_GOTPC: howto manager. (line 906) -* BFD_RELOC_SH_GOTPC_HI16: howto manager. (line 926) -* BFD_RELOC_SH_GOTPC_LOW16: howto manager. (line 923) -* BFD_RELOC_SH_GOTPC_MEDHI16: howto manager. (line 925) -* BFD_RELOC_SH_GOTPC_MEDLOW16: howto manager. (line 924) -* BFD_RELOC_SH_GOTPLT10BY4: howto manager. (line 933) -* BFD_RELOC_SH_GOTPLT10BY8: howto manager. (line 934) -* BFD_RELOC_SH_GOTPLT32: howto manager. (line 935) -* BFD_RELOC_SH_GOTPLT_HI16: howto manager. (line 914) -* BFD_RELOC_SH_GOTPLT_LOW16: howto manager. (line 911) -* BFD_RELOC_SH_GOTPLT_MEDHI16: howto manager. (line 913) -* BFD_RELOC_SH_GOTPLT_MEDLOW16: howto manager. (line 912) -* BFD_RELOC_SH_GOT_HI16: howto manager. (line 910) -* BFD_RELOC_SH_GOT_LOW16: howto manager. (line 907) -* BFD_RELOC_SH_GOT_MEDHI16: howto manager. (line 909) -* BFD_RELOC_SH_GOT_MEDLOW16: howto manager. (line 908) -* BFD_RELOC_SH_IMM3: howto manager. (line 876) -* BFD_RELOC_SH_IMM3U: howto manager. (line 877) -* BFD_RELOC_SH_IMM4: howto manager. (line 884) -* BFD_RELOC_SH_IMM4BY2: howto manager. (line 885) -* BFD_RELOC_SH_IMM4BY4: howto manager. (line 886) -* BFD_RELOC_SH_IMM8: howto manager. (line 887) -* BFD_RELOC_SH_IMM8BY2: howto manager. (line 888) -* BFD_RELOC_SH_IMM8BY4: howto manager. (line 889) -* BFD_RELOC_SH_IMMS10: howto manager. (line 941) -* BFD_RELOC_SH_IMMS10BY2: howto manager. (line 942) -* BFD_RELOC_SH_IMMS10BY4: howto manager. (line 943) -* BFD_RELOC_SH_IMMS10BY8: howto manager. (line 944) -* BFD_RELOC_SH_IMMS16: howto manager. (line 945) -* BFD_RELOC_SH_IMMS6: howto manager. (line 938) -* BFD_RELOC_SH_IMMS6BY32: howto manager. (line 939) -* BFD_RELOC_SH_IMMU16: howto manager. (line 946) -* BFD_RELOC_SH_IMMU5: howto manager. (line 937) -* BFD_RELOC_SH_IMMU6: howto manager. (line 940) -* BFD_RELOC_SH_IMM_HI16: howto manager. (line 953) -* BFD_RELOC_SH_IMM_HI16_PCREL: howto manager. (line 954) -* BFD_RELOC_SH_IMM_LOW16: howto manager. (line 947) -* BFD_RELOC_SH_IMM_LOW16_PCREL: howto manager. (line 948) -* BFD_RELOC_SH_IMM_MEDHI16: howto manager. (line 951) -* BFD_RELOC_SH_IMM_MEDHI16_PCREL: howto manager. (line 952) -* BFD_RELOC_SH_IMM_MEDLOW16: howto manager. (line 949) -* BFD_RELOC_SH_IMM_MEDLOW16_PCREL: howto manager. (line 950) -* BFD_RELOC_SH_JMP_SLOT: howto manager. (line 904) -* BFD_RELOC_SH_JMP_SLOT64: howto manager. (line 929) -* BFD_RELOC_SH_LABEL: howto manager. (line 899) -* BFD_RELOC_SH_LOOP_END: howto manager. (line 901) -* BFD_RELOC_SH_LOOP_START: howto manager. (line 900) -* BFD_RELOC_SH_PCDISP12BY2: howto manager. (line 875) -* BFD_RELOC_SH_PCDISP8BY2: howto manager. (line 874) -* BFD_RELOC_SH_PCRELIMM8BY2: howto manager. (line 890) -* BFD_RELOC_SH_PCRELIMM8BY4: howto manager. (line 891) -* BFD_RELOC_SH_PLT_HI16: howto manager. (line 918) -* BFD_RELOC_SH_PLT_LOW16: howto manager. (line 915) -* BFD_RELOC_SH_PLT_MEDHI16: howto manager. (line 917) -* BFD_RELOC_SH_PLT_MEDLOW16: howto manager. (line 916) -* BFD_RELOC_SH_PT_16: howto manager. (line 955) -* BFD_RELOC_SH_RELATIVE: howto manager. (line 905) -* BFD_RELOC_SH_RELATIVE64: howto manager. (line 930) -* BFD_RELOC_SH_SHMEDIA_CODE: howto manager. (line 936) -* BFD_RELOC_SH_SWITCH16: howto manager. (line 892) -* BFD_RELOC_SH_SWITCH32: howto manager. (line 893) -* BFD_RELOC_SH_TLS_DTPMOD32: howto manager. (line 961) -* BFD_RELOC_SH_TLS_DTPOFF32: howto manager. (line 962) -* BFD_RELOC_SH_TLS_GD_32: howto manager. (line 956) -* BFD_RELOC_SH_TLS_IE_32: howto manager. (line 959) -* BFD_RELOC_SH_TLS_LDO_32: howto manager. (line 958) -* BFD_RELOC_SH_TLS_LD_32: howto manager. (line 957) -* BFD_RELOC_SH_TLS_LE_32: howto manager. (line 960) -* BFD_RELOC_SH_TLS_TPOFF32: howto manager. (line 963) -* BFD_RELOC_SH_USES: howto manager. (line 894) +* BFD_RELOC_RX_16U: howto manager. (line 1808) +* BFD_RELOC_RX_16_OP: howto manager. (line 1804) +* BFD_RELOC_RX_24U: howto manager. (line 1809) +* BFD_RELOC_RX_24_OP: howto manager. (line 1805) +* BFD_RELOC_RX_32_OP: howto manager. (line 1806) +* BFD_RELOC_RX_8U: howto manager. (line 1807) +* BFD_RELOC_RX_ABS16: howto manager. (line 1819) +* BFD_RELOC_RX_ABS16U: howto manager. (line 1823) +* BFD_RELOC_RX_ABS16UL: howto manager. (line 1825) +* BFD_RELOC_RX_ABS16UW: howto manager. (line 1824) +* BFD_RELOC_RX_ABS16_REV: howto manager. (line 1820) +* BFD_RELOC_RX_ABS32: howto manager. (line 1821) +* BFD_RELOC_RX_ABS32_REV: howto manager. (line 1822) +* BFD_RELOC_RX_ABS8: howto manager. (line 1818) +* BFD_RELOC_RX_DIFF: howto manager. (line 1811) +* BFD_RELOC_RX_DIR3U_PCREL: howto manager. (line 1810) +* BFD_RELOC_RX_GPRELB: howto manager. (line 1812) +* BFD_RELOC_RX_GPRELL: howto manager. (line 1814) +* BFD_RELOC_RX_GPRELW: howto manager. (line 1813) +* BFD_RELOC_RX_NEG16: howto manager. (line 1801) +* BFD_RELOC_RX_NEG24: howto manager. (line 1802) +* BFD_RELOC_RX_NEG32: howto manager. (line 1803) +* BFD_RELOC_RX_NEG8: howto manager. (line 1800) +* BFD_RELOC_RX_OP_NEG: howto manager. (line 1817) +* BFD_RELOC_RX_OP_SUBTRACT: howto manager. (line 1816) +* BFD_RELOC_RX_RELAX: howto manager. (line 1826) +* BFD_RELOC_RX_SYM: howto manager. (line 1815) +* BFD_RELOC_SCORE16_BRANCH: howto manager. (line 1929) +* BFD_RELOC_SCORE16_JMP: howto manager. (line 1927) +* BFD_RELOC_SCORE_BCMP: howto manager. (line 1931) +* BFD_RELOC_SCORE_BRANCH: howto manager. (line 1921) +* BFD_RELOC_SCORE_CALL15: howto manager. (line 1935) +* BFD_RELOC_SCORE_DUMMY2: howto manager. (line 1918) +* BFD_RELOC_SCORE_DUMMY_HI16: howto manager. (line 1936) +* BFD_RELOC_SCORE_GOT15: howto manager. (line 1933) +* BFD_RELOC_SCORE_GOT_LO16: howto manager. (line 1934) +* BFD_RELOC_SCORE_GPREL15: howto manager. (line 1916) +* BFD_RELOC_SCORE_IMM30: howto manager. (line 1923) +* BFD_RELOC_SCORE_IMM32: howto manager. (line 1925) +* BFD_RELOC_SCORE_JMP: howto manager. (line 1919) +* BFD_RELOC_SH_ALIGN: howto manager. (line 898) +* BFD_RELOC_SH_CODE: howto manager. (line 899) +* BFD_RELOC_SH_COPY: howto manager. (line 904) +* BFD_RELOC_SH_COPY64: howto manager. (line 929) +* BFD_RELOC_SH_COUNT: howto manager. (line 897) +* BFD_RELOC_SH_DATA: howto manager. (line 900) +* BFD_RELOC_SH_DISP12: howto manager. (line 880) +* BFD_RELOC_SH_DISP12BY2: howto manager. (line 881) +* BFD_RELOC_SH_DISP12BY4: howto manager. (line 882) +* BFD_RELOC_SH_DISP12BY8: howto manager. (line 883) +* BFD_RELOC_SH_DISP20: howto manager. (line 884) +* BFD_RELOC_SH_DISP20BY8: howto manager. (line 885) +* BFD_RELOC_SH_FUNCDESC: howto manager. (line 972) +* BFD_RELOC_SH_GLOB_DAT: howto manager. (line 905) +* BFD_RELOC_SH_GLOB_DAT64: howto manager. (line 930) +* BFD_RELOC_SH_GOT10BY4: howto manager. (line 933) +* BFD_RELOC_SH_GOT10BY8: howto manager. (line 934) +* BFD_RELOC_SH_GOT20: howto manager. (line 966) +* BFD_RELOC_SH_GOTFUNCDESC: howto manager. (line 968) +* BFD_RELOC_SH_GOTFUNCDESC20: howto manager. (line 969) +* BFD_RELOC_SH_GOTOFF20: howto manager. (line 967) +* BFD_RELOC_SH_GOTOFFFUNCDESC: howto manager. (line 970) +* BFD_RELOC_SH_GOTOFFFUNCDESC20: howto manager. (line 971) +* BFD_RELOC_SH_GOTOFF_HI16: howto manager. (line 924) +* BFD_RELOC_SH_GOTOFF_LOW16: howto manager. (line 921) +* BFD_RELOC_SH_GOTOFF_MEDHI16: howto manager. (line 923) +* BFD_RELOC_SH_GOTOFF_MEDLOW16: howto manager. (line 922) +* BFD_RELOC_SH_GOTPC: howto manager. (line 908) +* BFD_RELOC_SH_GOTPC_HI16: howto manager. (line 928) +* BFD_RELOC_SH_GOTPC_LOW16: howto manager. (line 925) +* BFD_RELOC_SH_GOTPC_MEDHI16: howto manager. (line 927) +* BFD_RELOC_SH_GOTPC_MEDLOW16: howto manager. (line 926) +* BFD_RELOC_SH_GOTPLT10BY4: howto manager. (line 935) +* BFD_RELOC_SH_GOTPLT10BY8: howto manager. (line 936) +* BFD_RELOC_SH_GOTPLT32: howto manager. (line 937) +* BFD_RELOC_SH_GOTPLT_HI16: howto manager. (line 916) +* BFD_RELOC_SH_GOTPLT_LOW16: howto manager. (line 913) +* BFD_RELOC_SH_GOTPLT_MEDHI16: howto manager. (line 915) +* BFD_RELOC_SH_GOTPLT_MEDLOW16: howto manager. (line 914) +* BFD_RELOC_SH_GOT_HI16: howto manager. (line 912) +* BFD_RELOC_SH_GOT_LOW16: howto manager. (line 909) +* BFD_RELOC_SH_GOT_MEDHI16: howto manager. (line 911) +* BFD_RELOC_SH_GOT_MEDLOW16: howto manager. (line 910) +* BFD_RELOC_SH_IMM3: howto manager. (line 878) +* BFD_RELOC_SH_IMM3U: howto manager. (line 879) +* BFD_RELOC_SH_IMM4: howto manager. (line 886) +* BFD_RELOC_SH_IMM4BY2: howto manager. (line 887) +* BFD_RELOC_SH_IMM4BY4: howto manager. (line 888) +* BFD_RELOC_SH_IMM8: howto manager. (line 889) +* BFD_RELOC_SH_IMM8BY2: howto manager. (line 890) +* BFD_RELOC_SH_IMM8BY4: howto manager. (line 891) +* BFD_RELOC_SH_IMMS10: howto manager. (line 943) +* BFD_RELOC_SH_IMMS10BY2: howto manager. (line 944) +* BFD_RELOC_SH_IMMS10BY4: howto manager. (line 945) +* BFD_RELOC_SH_IMMS10BY8: howto manager. (line 946) +* BFD_RELOC_SH_IMMS16: howto manager. (line 947) +* BFD_RELOC_SH_IMMS6: howto manager. (line 940) +* BFD_RELOC_SH_IMMS6BY32: howto manager. (line 941) +* BFD_RELOC_SH_IMMU16: howto manager. (line 948) +* BFD_RELOC_SH_IMMU5: howto manager. (line 939) +* BFD_RELOC_SH_IMMU6: howto manager. (line 942) +* BFD_RELOC_SH_IMM_HI16: howto manager. (line 955) +* BFD_RELOC_SH_IMM_HI16_PCREL: howto manager. (line 956) +* BFD_RELOC_SH_IMM_LOW16: howto manager. (line 949) +* BFD_RELOC_SH_IMM_LOW16_PCREL: howto manager. (line 950) +* BFD_RELOC_SH_IMM_MEDHI16: howto manager. (line 953) +* BFD_RELOC_SH_IMM_MEDHI16_PCREL: howto manager. (line 954) +* BFD_RELOC_SH_IMM_MEDLOW16: howto manager. (line 951) +* BFD_RELOC_SH_IMM_MEDLOW16_PCREL: howto manager. (line 952) +* BFD_RELOC_SH_JMP_SLOT: howto manager. (line 906) +* BFD_RELOC_SH_JMP_SLOT64: howto manager. (line 931) +* BFD_RELOC_SH_LABEL: howto manager. (line 901) +* BFD_RELOC_SH_LOOP_END: howto manager. (line 903) +* BFD_RELOC_SH_LOOP_START: howto manager. (line 902) +* BFD_RELOC_SH_PCDISP12BY2: howto manager. (line 877) +* BFD_RELOC_SH_PCDISP8BY2: howto manager. (line 876) +* BFD_RELOC_SH_PCRELIMM8BY2: howto manager. (line 892) +* BFD_RELOC_SH_PCRELIMM8BY4: howto manager. (line 893) +* BFD_RELOC_SH_PLT_HI16: howto manager. (line 920) +* BFD_RELOC_SH_PLT_LOW16: howto manager. (line 917) +* BFD_RELOC_SH_PLT_MEDHI16: howto manager. (line 919) +* BFD_RELOC_SH_PLT_MEDLOW16: howto manager. (line 918) +* BFD_RELOC_SH_PT_16: howto manager. (line 957) +* BFD_RELOC_SH_RELATIVE: howto manager. (line 907) +* BFD_RELOC_SH_RELATIVE64: howto manager. (line 932) +* BFD_RELOC_SH_SHMEDIA_CODE: howto manager. (line 938) +* BFD_RELOC_SH_SWITCH16: howto manager. (line 894) +* BFD_RELOC_SH_SWITCH32: howto manager. (line 895) +* BFD_RELOC_SH_TLS_DTPMOD32: howto manager. (line 963) +* BFD_RELOC_SH_TLS_DTPOFF32: howto manager. (line 964) +* BFD_RELOC_SH_TLS_GD_32: howto manager. (line 958) +* BFD_RELOC_SH_TLS_IE_32: howto manager. (line 961) +* BFD_RELOC_SH_TLS_LDO_32: howto manager. (line 960) +* BFD_RELOC_SH_TLS_LD_32: howto manager. (line 959) +* BFD_RELOC_SH_TLS_LE_32: howto manager. (line 962) +* BFD_RELOC_SH_TLS_TPOFF32: howto manager. (line 965) +* BFD_RELOC_SH_USES: howto manager. (line 896) * BFD_RELOC_SIZE32: howto manager. (line 69) * BFD_RELOC_SIZE64: howto manager. (line 70) * BFD_RELOC_SPARC13: howto manager. (line 125) @@ -13162,387 +13224,386 @@ BFD Index * BFD_RELOC_SPU_PCREL9b: howto manager. (line 215) * BFD_RELOC_SPU_PPU32: howto manager. (line 219) * BFD_RELOC_SPU_PPU64: howto manager. (line 220) -* BFD_RELOC_THUMB_PCREL_BLX: howto manager. (line 736) -* BFD_RELOC_THUMB_PCREL_BRANCH12: howto manager. (line 747) -* BFD_RELOC_THUMB_PCREL_BRANCH20: howto manager. (line 748) -* BFD_RELOC_THUMB_PCREL_BRANCH23: howto manager. (line 749) -* BFD_RELOC_THUMB_PCREL_BRANCH25: howto manager. (line 750) -* BFD_RELOC_THUMB_PCREL_BRANCH7: howto manager. (line 745) -* BFD_RELOC_THUMB_PCREL_BRANCH9: howto manager. (line 746) -* BFD_RELOC_TIC30_LDP: howto manager. (line 1473) -* BFD_RELOC_TIC54X_16_OF_23: howto manager. (line 1487) -* BFD_RELOC_TIC54X_23: howto manager. (line 1485) -* BFD_RELOC_TIC54X_MS7_OF_23: howto manager. (line 1491) -* BFD_RELOC_TIC54X_PARTLS7: howto manager. (line 1477) -* BFD_RELOC_TIC54X_PARTMS9: howto manager. (line 1481) -* BFD_RELOC_TILEGX_BROFF_X1: howto manager. (line 3034) -* BFD_RELOC_TILEGX_COPY: howto manager. (line 3030) -* BFD_RELOC_TILEGX_DEST_IMM8_X1: howto manager. (line 3041) -* BFD_RELOC_TILEGX_GLOB_DAT: howto manager. (line 3031) -* BFD_RELOC_TILEGX_HW0: howto manager. (line 3023) -* BFD_RELOC_TILEGX_HW0_LAST: howto manager. (line 3027) -* BFD_RELOC_TILEGX_HW1: howto manager. (line 3024) -* BFD_RELOC_TILEGX_HW1_LAST: howto manager. (line 3028) -* BFD_RELOC_TILEGX_HW2: howto manager. (line 3025) -* BFD_RELOC_TILEGX_HW2_LAST: howto manager. (line 3029) -* BFD_RELOC_TILEGX_HW3: howto manager. (line 3026) -* BFD_RELOC_TILEGX_IMM16_X0_HW0: howto manager. (line 3050) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT: howto manager. (line 3078) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST: howto manager. (line 3058) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager. (line 3086) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager. (line 3072) +* BFD_RELOC_THUMB_PCREL_BLX: howto manager. (line 738) +* BFD_RELOC_THUMB_PCREL_BRANCH12: howto manager. (line 749) +* BFD_RELOC_THUMB_PCREL_BRANCH20: howto manager. (line 750) +* BFD_RELOC_THUMB_PCREL_BRANCH23: howto manager. (line 751) +* BFD_RELOC_THUMB_PCREL_BRANCH25: howto manager. (line 752) +* BFD_RELOC_THUMB_PCREL_BRANCH7: howto manager. (line 747) +* BFD_RELOC_THUMB_PCREL_BRANCH9: howto manager. (line 748) +* BFD_RELOC_TIC30_LDP: howto manager. (line 1476) +* BFD_RELOC_TIC54X_16_OF_23: howto manager. (line 1490) +* BFD_RELOC_TIC54X_23: howto manager. (line 1488) +* BFD_RELOC_TIC54X_MS7_OF_23: howto manager. (line 1494) +* BFD_RELOC_TIC54X_PARTLS7: howto manager. (line 1480) +* BFD_RELOC_TIC54X_PARTMS9: howto manager. (line 1484) +* BFD_RELOC_TILEGX_BROFF_X1: howto manager. (line 3039) +* BFD_RELOC_TILEGX_COPY: howto manager. (line 3035) +* BFD_RELOC_TILEGX_DEST_IMM8_X1: howto manager. (line 3046) +* BFD_RELOC_TILEGX_GLOB_DAT: howto manager. (line 3036) +* BFD_RELOC_TILEGX_HW0: howto manager. (line 3028) +* BFD_RELOC_TILEGX_HW0_LAST: howto manager. (line 3032) +* BFD_RELOC_TILEGX_HW1: howto manager. (line 3029) +* BFD_RELOC_TILEGX_HW1_LAST: howto manager. (line 3033) +* BFD_RELOC_TILEGX_HW2: howto manager. (line 3030) +* BFD_RELOC_TILEGX_HW2_LAST: howto manager. (line 3034) +* BFD_RELOC_TILEGX_HW3: howto manager. (line 3031) +* BFD_RELOC_TILEGX_IMM16_X0_HW0: howto manager. (line 3055) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT: howto manager. (line 3083) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST: howto manager. (line 3063) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager. (line 3091) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager. (line 3077) * BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL: howto manager. - (line 3106) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager. (line 3100) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager. (line 3112) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager. (line 3096) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL: howto manager. (line 3064) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager. (line 3080) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD: howto manager. (line 3092) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE: howto manager. (line 3104) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE: howto manager. (line 3094) -* BFD_RELOC_TILEGX_IMM16_X0_HW1: howto manager. (line 3052) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST: howto manager. (line 3060) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager. (line 3088) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager. (line 3074) + (line 3111) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager. (line 3105) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager. (line 3117) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager. (line 3101) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL: howto manager. (line 3069) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager. (line 3085) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD: howto manager. (line 3097) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE: howto manager. (line 3109) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE: howto manager. (line 3099) +* BFD_RELOC_TILEGX_IMM16_X0_HW1: howto manager. (line 3057) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST: howto manager. (line 3065) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager. (line 3093) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager. (line 3079) * BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL: howto manager. - (line 3108) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager. (line 3102) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager. (line 3114) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager. (line 3098) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL: howto manager. (line 3066) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager. (line 3082) -* BFD_RELOC_TILEGX_IMM16_X0_HW2: howto manager. (line 3054) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST: howto manager. (line 3062) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager. (line 3076) + (line 3113) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager. (line 3107) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager. (line 3119) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager. (line 3103) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL: howto manager. (line 3071) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager. (line 3087) +* BFD_RELOC_TILEGX_IMM16_X0_HW2: howto manager. (line 3059) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST: howto manager. (line 3067) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager. (line 3081) * BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL: howto manager. - (line 3110) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL: howto manager. (line 3068) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager. (line 3084) -* BFD_RELOC_TILEGX_IMM16_X0_HW3: howto manager. (line 3056) -* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL: howto manager. (line 3070) -* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager. (line 3090) -* BFD_RELOC_TILEGX_IMM16_X1_HW0: howto manager. (line 3051) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT: howto manager. (line 3079) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST: howto manager. (line 3059) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager. (line 3087) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager. (line 3073) + (line 3115) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL: howto manager. (line 3073) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager. (line 3089) +* BFD_RELOC_TILEGX_IMM16_X0_HW3: howto manager. (line 3061) +* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL: howto manager. (line 3075) +* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager. (line 3095) +* BFD_RELOC_TILEGX_IMM16_X1_HW0: howto manager. (line 3056) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT: howto manager. (line 3084) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST: howto manager. (line 3064) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager. (line 3092) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager. (line 3078) * BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL: howto manager. - (line 3107) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager. (line 3101) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager. (line 3113) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager. (line 3097) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL: howto manager. (line 3065) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager. (line 3081) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD: howto manager. (line 3093) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE: howto manager. (line 3105) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE: howto manager. (line 3095) -* BFD_RELOC_TILEGX_IMM16_X1_HW1: howto manager. (line 3053) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST: howto manager. (line 3061) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager. (line 3089) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager. (line 3075) + (line 3112) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager. (line 3106) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager. (line 3118) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager. (line 3102) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL: howto manager. (line 3070) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager. (line 3086) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD: howto manager. (line 3098) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE: howto manager. (line 3110) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE: howto manager. (line 3100) +* BFD_RELOC_TILEGX_IMM16_X1_HW1: howto manager. (line 3058) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST: howto manager. (line 3066) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager. (line 3094) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager. (line 3080) * BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL: howto manager. - (line 3109) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager. (line 3103) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager. (line 3115) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager. (line 3099) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL: howto manager. (line 3067) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager. (line 3083) -* BFD_RELOC_TILEGX_IMM16_X1_HW2: howto manager. (line 3055) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST: howto manager. (line 3063) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager. (line 3077) + (line 3114) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager. (line 3108) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager. (line 3120) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager. (line 3104) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL: howto manager. (line 3072) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager. (line 3088) +* BFD_RELOC_TILEGX_IMM16_X1_HW2: howto manager. (line 3060) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST: howto manager. (line 3068) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager. (line 3082) * BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL: howto manager. - (line 3111) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL: howto manager. (line 3069) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager. (line 3085) -* BFD_RELOC_TILEGX_IMM16_X1_HW3: howto manager. (line 3057) -* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL: howto manager. (line 3071) -* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager. (line 3091) -* BFD_RELOC_TILEGX_IMM8_X0: howto manager. (line 3037) -* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD: howto manager. (line 3128) -* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD: howto manager. (line 3123) -* BFD_RELOC_TILEGX_IMM8_X1: howto manager. (line 3039) -* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD: howto manager. (line 3129) -* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD: howto manager. (line 3124) -* BFD_RELOC_TILEGX_IMM8_Y0: howto manager. (line 3038) -* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD: howto manager. (line 3130) -* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD: howto manager. (line 3125) -* BFD_RELOC_TILEGX_IMM8_Y1: howto manager. (line 3040) -* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD: howto manager. (line 3131) -* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD: howto manager. (line 3126) -* BFD_RELOC_TILEGX_JMP_SLOT: howto manager. (line 3032) -* BFD_RELOC_TILEGX_JUMPOFF_X1: howto manager. (line 3035) -* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT: howto manager. (line 3036) -* BFD_RELOC_TILEGX_MF_IMM14_X1: howto manager. (line 3043) -* BFD_RELOC_TILEGX_MMEND_X0: howto manager. (line 3045) -* BFD_RELOC_TILEGX_MMSTART_X0: howto manager. (line 3044) -* BFD_RELOC_TILEGX_MT_IMM14_X1: howto manager. (line 3042) -* BFD_RELOC_TILEGX_RELATIVE: howto manager. (line 3033) -* BFD_RELOC_TILEGX_SHAMT_X0: howto manager. (line 3046) -* BFD_RELOC_TILEGX_SHAMT_X1: howto manager. (line 3047) -* BFD_RELOC_TILEGX_SHAMT_Y0: howto manager. (line 3048) -* BFD_RELOC_TILEGX_SHAMT_Y1: howto manager. (line 3049) -* BFD_RELOC_TILEGX_TLS_DTPMOD32: howto manager. (line 3119) -* BFD_RELOC_TILEGX_TLS_DTPMOD64: howto manager. (line 3116) -* BFD_RELOC_TILEGX_TLS_DTPOFF32: howto manager. (line 3120) -* BFD_RELOC_TILEGX_TLS_DTPOFF64: howto manager. (line 3117) -* BFD_RELOC_TILEGX_TLS_GD_CALL: howto manager. (line 3122) -* BFD_RELOC_TILEGX_TLS_IE_LOAD: howto manager. (line 3127) -* BFD_RELOC_TILEGX_TLS_TPOFF32: howto manager. (line 3121) -* BFD_RELOC_TILEGX_TLS_TPOFF64: howto manager. (line 3118) -* BFD_RELOC_TILEPRO_BROFF_X1: howto manager. (line 2947) -* BFD_RELOC_TILEPRO_COPY: howto manager. (line 2943) -* BFD_RELOC_TILEPRO_DEST_IMM8_X1: howto manager. (line 2954) -* BFD_RELOC_TILEPRO_GLOB_DAT: howto manager. (line 2944) -* BFD_RELOC_TILEPRO_IMM16_X0: howto manager. (line 2957) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT: howto manager. (line 2973) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA: howto manager. (line 2979) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI: howto manager. (line 2977) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO: howto manager. (line 2975) -* BFD_RELOC_TILEPRO_IMM16_X0_HA: howto manager. (line 2963) -* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL: howto manager. (line 2971) -* BFD_RELOC_TILEPRO_IMM16_X0_HI: howto manager. (line 2961) -* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL: howto manager. (line 2969) -* BFD_RELOC_TILEPRO_IMM16_X0_LO: howto manager. (line 2959) -* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL: howto manager. (line 2967) -* BFD_RELOC_TILEPRO_IMM16_X0_PCREL: howto manager. (line 2965) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD: howto manager. (line 2995) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA: howto manager. (line 3001) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI: howto manager. (line 2999) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO: howto manager. (line 2997) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE: howto manager. (line 3003) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA: howto manager. (line 3009) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI: howto manager. (line 3007) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO: howto manager. (line 3005) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE: howto manager. (line 3014) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA: howto manager. (line 3020) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI: howto manager. (line 3018) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO: howto manager. (line 3016) -* BFD_RELOC_TILEPRO_IMM16_X1: howto manager. (line 2958) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT: howto manager. (line 2974) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA: howto manager. (line 2980) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI: howto manager. (line 2978) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO: howto manager. (line 2976) -* BFD_RELOC_TILEPRO_IMM16_X1_HA: howto manager. (line 2964) -* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL: howto manager. (line 2972) -* BFD_RELOC_TILEPRO_IMM16_X1_HI: howto manager. (line 2962) -* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL: howto manager. (line 2970) -* BFD_RELOC_TILEPRO_IMM16_X1_LO: howto manager. (line 2960) -* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL: howto manager. (line 2968) -* BFD_RELOC_TILEPRO_IMM16_X1_PCREL: howto manager. (line 2966) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD: howto manager. (line 2996) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA: howto manager. (line 3002) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI: howto manager. (line 3000) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO: howto manager. (line 2998) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE: howto manager. (line 3004) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA: howto manager. (line 3010) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI: howto manager. (line 3008) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO: howto manager. (line 3006) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE: howto manager. (line 3015) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA: howto manager. (line 3021) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI: howto manager. (line 3019) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO: howto manager. (line 3017) -* BFD_RELOC_TILEPRO_IMM8_X0: howto manager. (line 2950) -* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD: howto manager. (line 2990) -* BFD_RELOC_TILEPRO_IMM8_X1: howto manager. (line 2952) -* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD: howto manager. (line 2991) -* BFD_RELOC_TILEPRO_IMM8_Y0: howto manager. (line 2951) -* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD: howto manager. (line 2992) -* BFD_RELOC_TILEPRO_IMM8_Y1: howto manager. (line 2953) -* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD: howto manager. (line 2993) -* BFD_RELOC_TILEPRO_JMP_SLOT: howto manager. (line 2945) -* BFD_RELOC_TILEPRO_JOFFLONG_X1: howto manager. (line 2948) -* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT: howto manager. (line 2949) -* BFD_RELOC_TILEPRO_MF_IMM15_X1: howto manager. (line 2956) -* BFD_RELOC_TILEPRO_MMEND_X0: howto manager. (line 2982) -* BFD_RELOC_TILEPRO_MMEND_X1: howto manager. (line 2984) -* BFD_RELOC_TILEPRO_MMSTART_X0: howto manager. (line 2981) -* BFD_RELOC_TILEPRO_MMSTART_X1: howto manager. (line 2983) -* BFD_RELOC_TILEPRO_MT_IMM15_X1: howto manager. (line 2955) -* BFD_RELOC_TILEPRO_RELATIVE: howto manager. (line 2946) -* BFD_RELOC_TILEPRO_SHAMT_X0: howto manager. (line 2985) -* BFD_RELOC_TILEPRO_SHAMT_X1: howto manager. (line 2986) -* BFD_RELOC_TILEPRO_SHAMT_Y0: howto manager. (line 2987) -* BFD_RELOC_TILEPRO_SHAMT_Y1: howto manager. (line 2988) -* BFD_RELOC_TILEPRO_TLS_DTPMOD32: howto manager. (line 3011) -* BFD_RELOC_TILEPRO_TLS_DTPOFF32: howto manager. (line 3012) -* BFD_RELOC_TILEPRO_TLS_GD_CALL: howto manager. (line 2989) -* BFD_RELOC_TILEPRO_TLS_IE_LOAD: howto manager. (line 2994) -* BFD_RELOC_TILEPRO_TLS_TPOFF32: howto manager. (line 3013) -* bfd_reloc_type_lookup: howto manager. (line 3158) -* BFD_RELOC_V850_16_GOT: howto manager. (line 1449) -* BFD_RELOC_V850_16_GOTOFF: howto manager. (line 1465) -* BFD_RELOC_V850_16_PCREL: howto manager. (line 1429) -* BFD_RELOC_V850_16_S1: howto manager. (line 1441) -* BFD_RELOC_V850_16_SPLIT_OFFSET: howto manager. (line 1439) -* BFD_RELOC_V850_17_PCREL: howto manager. (line 1431) -* BFD_RELOC_V850_22_PCREL: howto manager. (line 1383) -* BFD_RELOC_V850_22_PLT_PCREL: howto manager. (line 1453) -* BFD_RELOC_V850_23: howto manager. (line 1433) -* BFD_RELOC_V850_32_ABS: howto manager. (line 1437) -* BFD_RELOC_V850_32_GOT: howto manager. (line 1451) -* BFD_RELOC_V850_32_GOTOFF: howto manager. (line 1467) -* BFD_RELOC_V850_32_GOTPCREL: howto manager. (line 1447) -* BFD_RELOC_V850_32_PCREL: howto manager. (line 1435) -* BFD_RELOC_V850_32_PLT_PCREL: howto manager. (line 1455) -* BFD_RELOC_V850_9_PCREL: howto manager. (line 1381) -* BFD_RELOC_V850_ALIGN: howto manager. (line 1424) -* BFD_RELOC_V850_CALLT_15_16_OFFSET: howto manager. (line 1445) -* BFD_RELOC_V850_CALLT_16_16_OFFSET: howto manager. (line 1418) -* BFD_RELOC_V850_CALLT_6_7_OFFSET: howto manager. (line 1416) -* BFD_RELOC_V850_CODE: howto manager. (line 1469) -* BFD_RELOC_V850_COPY: howto manager. (line 1457) -* BFD_RELOC_V850_DATA: howto manager. (line 1471) -* BFD_RELOC_V850_GLOB_DAT: howto manager. (line 1459) -* BFD_RELOC_V850_JMP_SLOT: howto manager. (line 1461) -* BFD_RELOC_V850_LO16_S1: howto manager. (line 1443) -* BFD_RELOC_V850_LO16_SPLIT_OFFSET: howto manager. (line 1426) -* BFD_RELOC_V850_LONGCALL: howto manager. (line 1420) -* BFD_RELOC_V850_LONGJUMP: howto manager. (line 1422) -* BFD_RELOC_V850_RELATIVE: howto manager. (line 1463) -* BFD_RELOC_V850_SDA_15_16_OFFSET: howto manager. (line 1387) -* BFD_RELOC_V850_SDA_16_16_OFFSET: howto manager. (line 1385) -* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager. (line 1410) -* BFD_RELOC_V850_TDA_16_16_OFFSET: howto manager. (line 1403) -* BFD_RELOC_V850_TDA_4_4_OFFSET: howto manager. (line 1408) -* BFD_RELOC_V850_TDA_4_5_OFFSET: howto manager. (line 1405) -* BFD_RELOC_V850_TDA_6_8_OFFSET: howto manager. (line 1395) -* BFD_RELOC_V850_TDA_7_7_OFFSET: howto manager. (line 1401) -* BFD_RELOC_V850_TDA_7_8_OFFSET: howto manager. (line 1398) -* BFD_RELOC_V850_ZDA_15_16_OFFSET: howto manager. (line 1392) -* BFD_RELOC_V850_ZDA_16_16_OFFSET: howto manager. (line 1390) -* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager. (line 1413) -* BFD_RELOC_VAX_GLOB_DAT: howto manager. (line 2353) -* BFD_RELOC_VAX_JMP_SLOT: howto manager. (line 2354) -* BFD_RELOC_VAX_RELATIVE: howto manager. (line 2355) -* BFD_RELOC_VISIUM_HI16: howto manager. (line 3148) -* BFD_RELOC_VISIUM_HI16_PCREL: howto manager. (line 3152) -* BFD_RELOC_VISIUM_IM16: howto manager. (line 3150) -* BFD_RELOC_VISIUM_IM16_PCREL: howto manager. (line 3154) -* BFD_RELOC_VISIUM_LO16: howto manager. (line 3149) -* BFD_RELOC_VISIUM_LO16_PCREL: howto manager. (line 3153) -* BFD_RELOC_VISIUM_REL16: howto manager. (line 3151) -* BFD_RELOC_VPE4KMATH_DATA: howto manager. (line 1956) -* BFD_RELOC_VPE4KMATH_INSN: howto manager. (line 1957) -* BFD_RELOC_VTABLE_ENTRY: howto manager. (line 1960) -* BFD_RELOC_VTABLE_INHERIT: howto manager. (line 1959) -* BFD_RELOC_X86_64_32S: howto manager. (line 551) -* BFD_RELOC_X86_64_COPY: howto manager. (line 546) -* BFD_RELOC_X86_64_DTPMOD64: howto manager. (line 552) -* BFD_RELOC_X86_64_DTPOFF32: howto manager. (line 557) -* BFD_RELOC_X86_64_DTPOFF64: howto manager. (line 553) -* BFD_RELOC_X86_64_GLOB_DAT: howto manager. (line 547) -* BFD_RELOC_X86_64_GOT32: howto manager. (line 544) -* BFD_RELOC_X86_64_GOT64: howto manager. (line 562) -* BFD_RELOC_X86_64_GOTOFF64: howto manager. (line 560) -* BFD_RELOC_X86_64_GOTPC32: howto manager. (line 561) -* BFD_RELOC_X86_64_GOTPC32_TLSDESC: howto manager. (line 567) -* BFD_RELOC_X86_64_GOTPC64: howto manager. (line 564) -* BFD_RELOC_X86_64_GOTPCREL: howto manager. (line 550) -* BFD_RELOC_X86_64_GOTPCREL64: howto manager. (line 563) -* BFD_RELOC_X86_64_GOTPCRELX: howto manager. (line 573) -* BFD_RELOC_X86_64_GOTPLT64: howto manager. (line 565) -* BFD_RELOC_X86_64_GOTTPOFF: howto manager. (line 558) -* BFD_RELOC_X86_64_IRELATIVE: howto manager. (line 570) -* BFD_RELOC_X86_64_JUMP_SLOT: howto manager. (line 548) -* BFD_RELOC_X86_64_PC32_BND: howto manager. (line 571) -* BFD_RELOC_X86_64_PLT32: howto manager. (line 545) -* BFD_RELOC_X86_64_PLT32_BND: howto manager. (line 572) -* BFD_RELOC_X86_64_PLTOFF64: howto manager. (line 566) -* BFD_RELOC_X86_64_RELATIVE: howto manager. (line 549) -* BFD_RELOC_X86_64_REX_GOTPCRELX: howto manager. (line 574) -* BFD_RELOC_X86_64_TLSDESC: howto manager. (line 569) -* BFD_RELOC_X86_64_TLSDESC_CALL: howto manager. (line 568) -* BFD_RELOC_X86_64_TLSGD: howto manager. (line 555) -* BFD_RELOC_X86_64_TLSLD: howto manager. (line 556) -* BFD_RELOC_X86_64_TPOFF32: howto manager. (line 559) -* BFD_RELOC_X86_64_TPOFF64: howto manager. (line 554) -* BFD_RELOC_XC16X_PAG: howto manager. (line 2348) -* BFD_RELOC_XC16X_POF: howto manager. (line 2349) -* BFD_RELOC_XC16X_SEG: howto manager. (line 2350) -* BFD_RELOC_XC16X_SOF: howto manager. (line 2351) -* BFD_RELOC_XGATE_24: howto manager. (line 2103) -* BFD_RELOC_XGATE_GPAGE: howto manager. (line 2101) -* BFD_RELOC_XGATE_IMM3: howto manager. (line 2115) -* BFD_RELOC_XGATE_IMM4: howto manager. (line 2117) -* BFD_RELOC_XGATE_IMM5: howto manager. (line 2119) -* BFD_RELOC_XGATE_IMM8_HI: howto manager. (line 2112) -* BFD_RELOC_XGATE_IMM8_LO: howto manager. (line 2109) -* BFD_RELOC_XGATE_LO16: howto manager. (line 2098) -* BFD_RELOC_XGATE_PCREL_10: howto manager. (line 2107) -* BFD_RELOC_XGATE_PCREL_9: howto manager. (line 2105) -* BFD_RELOC_XGATE_RL_GROUP: howto manager. (line 2094) -* BFD_RELOC_XGATE_RL_JUMP: howto manager. (line 2091) -* BFD_RELOC_XSTORMY16_12: howto manager. (line 2342) -* BFD_RELOC_XSTORMY16_24: howto manager. (line 2343) -* BFD_RELOC_XSTORMY16_FPTR16: howto manager. (line 2344) -* BFD_RELOC_XSTORMY16_REL_12: howto manager. (line 2341) -* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 2511) -* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 2515) -* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 2462) -* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 2463) -* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 2461) -* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 2453) -* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 2454) -* BFD_RELOC_XTENSA_OP0: howto manager. (line 2506) -* BFD_RELOC_XTENSA_OP1: howto manager. (line 2507) -* BFD_RELOC_XTENSA_OP2: howto manager. (line 2508) -* BFD_RELOC_XTENSA_PLT: howto manager. (line 2457) -* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 2455) -* BFD_RELOC_XTENSA_RTLD: howto manager. (line 2449) -* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 2489) -* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 2470) -* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 2499) -* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 2480) -* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 2500) -* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 2481) -* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 2501) -* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 2482) -* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 2502) -* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 2483) -* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 2503) -* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 2484) -* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 2490) -* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 2471) -* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 2491) -* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 2472) -* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 2492) -* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 2473) -* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 2493) -* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 2474) -* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 2494) -* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 2475) -* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 2495) -* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 2476) -* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 2496) -* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 2477) -* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 2497) -* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 2478) -* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 2498) -* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 2479) -* BFD_RELOC_XTENSA_TLSDESC_ARG: howto manager. (line 2520) -* BFD_RELOC_XTENSA_TLSDESC_FN: howto manager. (line 2519) -* BFD_RELOC_XTENSA_TLS_ARG: howto manager. (line 2524) -* BFD_RELOC_XTENSA_TLS_CALL: howto manager. (line 2525) -* BFD_RELOC_XTENSA_TLS_DTPOFF: howto manager. (line 2521) -* BFD_RELOC_XTENSA_TLS_FUNC: howto manager. (line 2523) -* BFD_RELOC_XTENSA_TLS_TPOFF: howto manager. (line 2522) -* BFD_RELOC_Z80_DISP8: howto manager. (line 2527) -* BFD_RELOC_Z8K_CALLR: howto manager. (line 2531) -* BFD_RELOC_Z8K_DISP7: howto manager. (line 2529) -* BFD_RELOC_Z8K_IMM4L: howto manager. (line 2533) + (line 3116) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL: howto manager. (line 3074) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager. (line 3090) +* BFD_RELOC_TILEGX_IMM16_X1_HW3: howto manager. (line 3062) +* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL: howto manager. (line 3076) +* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager. (line 3096) +* BFD_RELOC_TILEGX_IMM8_X0: howto manager. (line 3042) +* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD: howto manager. (line 3133) +* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD: howto manager. (line 3128) +* BFD_RELOC_TILEGX_IMM8_X1: howto manager. (line 3044) +* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD: howto manager. (line 3134) +* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD: howto manager. (line 3129) +* BFD_RELOC_TILEGX_IMM8_Y0: howto manager. (line 3043) +* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD: howto manager. (line 3135) +* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD: howto manager. (line 3130) +* BFD_RELOC_TILEGX_IMM8_Y1: howto manager. (line 3045) +* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD: howto manager. (line 3136) +* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD: howto manager. (line 3131) +* BFD_RELOC_TILEGX_JMP_SLOT: howto manager. (line 3037) +* BFD_RELOC_TILEGX_JUMPOFF_X1: howto manager. (line 3040) +* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT: howto manager. (line 3041) +* BFD_RELOC_TILEGX_MF_IMM14_X1: howto manager. (line 3048) +* BFD_RELOC_TILEGX_MMEND_X0: howto manager. (line 3050) +* BFD_RELOC_TILEGX_MMSTART_X0: howto manager. (line 3049) +* BFD_RELOC_TILEGX_MT_IMM14_X1: howto manager. (line 3047) +* BFD_RELOC_TILEGX_RELATIVE: howto manager. (line 3038) +* BFD_RELOC_TILEGX_SHAMT_X0: howto manager. (line 3051) +* BFD_RELOC_TILEGX_SHAMT_X1: howto manager. (line 3052) +* BFD_RELOC_TILEGX_SHAMT_Y0: howto manager. (line 3053) +* BFD_RELOC_TILEGX_SHAMT_Y1: howto manager. (line 3054) +* BFD_RELOC_TILEGX_TLS_DTPMOD32: howto manager. (line 3124) +* BFD_RELOC_TILEGX_TLS_DTPMOD64: howto manager. (line 3121) +* BFD_RELOC_TILEGX_TLS_DTPOFF32: howto manager. (line 3125) +* BFD_RELOC_TILEGX_TLS_DTPOFF64: howto manager. (line 3122) +* BFD_RELOC_TILEGX_TLS_GD_CALL: howto manager. (line 3127) +* BFD_RELOC_TILEGX_TLS_IE_LOAD: howto manager. (line 3132) +* BFD_RELOC_TILEGX_TLS_TPOFF32: howto manager. (line 3126) +* BFD_RELOC_TILEGX_TLS_TPOFF64: howto manager. (line 3123) +* BFD_RELOC_TILEPRO_BROFF_X1: howto manager. (line 2952) +* BFD_RELOC_TILEPRO_COPY: howto manager. (line 2948) +* BFD_RELOC_TILEPRO_DEST_IMM8_X1: howto manager. (line 2959) +* BFD_RELOC_TILEPRO_GLOB_DAT: howto manager. (line 2949) +* BFD_RELOC_TILEPRO_IMM16_X0: howto manager. (line 2962) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT: howto manager. (line 2978) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA: howto manager. (line 2984) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI: howto manager. (line 2982) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO: howto manager. (line 2980) +* BFD_RELOC_TILEPRO_IMM16_X0_HA: howto manager. (line 2968) +* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL: howto manager. (line 2976) +* BFD_RELOC_TILEPRO_IMM16_X0_HI: howto manager. (line 2966) +* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL: howto manager. (line 2974) +* BFD_RELOC_TILEPRO_IMM16_X0_LO: howto manager. (line 2964) +* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL: howto manager. (line 2972) +* BFD_RELOC_TILEPRO_IMM16_X0_PCREL: howto manager. (line 2970) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD: howto manager. (line 3000) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA: howto manager. (line 3006) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI: howto manager. (line 3004) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO: howto manager. (line 3002) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE: howto manager. (line 3008) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA: howto manager. (line 3014) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI: howto manager. (line 3012) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO: howto manager. (line 3010) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE: howto manager. (line 3019) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA: howto manager. (line 3025) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI: howto manager. (line 3023) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO: howto manager. (line 3021) +* BFD_RELOC_TILEPRO_IMM16_X1: howto manager. (line 2963) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT: howto manager. (line 2979) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA: howto manager. (line 2985) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI: howto manager. (line 2983) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO: howto manager. (line 2981) +* BFD_RELOC_TILEPRO_IMM16_X1_HA: howto manager. (line 2969) +* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL: howto manager. (line 2977) +* BFD_RELOC_TILEPRO_IMM16_X1_HI: howto manager. (line 2967) +* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL: howto manager. (line 2975) +* BFD_RELOC_TILEPRO_IMM16_X1_LO: howto manager. (line 2965) +* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL: howto manager. (line 2973) +* BFD_RELOC_TILEPRO_IMM16_X1_PCREL: howto manager. (line 2971) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD: howto manager. (line 3001) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA: howto manager. (line 3007) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI: howto manager. (line 3005) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO: howto manager. (line 3003) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE: howto manager. (line 3009) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA: howto manager. (line 3015) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI: howto manager. (line 3013) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO: howto manager. (line 3011) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE: howto manager. (line 3020) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA: howto manager. (line 3026) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI: howto manager. (line 3024) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO: howto manager. (line 3022) +* BFD_RELOC_TILEPRO_IMM8_X0: howto manager. (line 2955) +* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD: howto manager. (line 2995) +* BFD_RELOC_TILEPRO_IMM8_X1: howto manager. (line 2957) +* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD: howto manager. (line 2996) +* BFD_RELOC_TILEPRO_IMM8_Y0: howto manager. (line 2956) +* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD: howto manager. (line 2997) +* BFD_RELOC_TILEPRO_IMM8_Y1: howto manager. (line 2958) +* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD: howto manager. (line 2998) +* BFD_RELOC_TILEPRO_JMP_SLOT: howto manager. (line 2950) +* BFD_RELOC_TILEPRO_JOFFLONG_X1: howto manager. (line 2953) +* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT: howto manager. (line 2954) +* BFD_RELOC_TILEPRO_MF_IMM15_X1: howto manager. (line 2961) +* BFD_RELOC_TILEPRO_MMEND_X0: howto manager. (line 2987) +* BFD_RELOC_TILEPRO_MMEND_X1: howto manager. (line 2989) +* BFD_RELOC_TILEPRO_MMSTART_X0: howto manager. (line 2986) +* BFD_RELOC_TILEPRO_MMSTART_X1: howto manager. (line 2988) +* BFD_RELOC_TILEPRO_MT_IMM15_X1: howto manager. (line 2960) +* BFD_RELOC_TILEPRO_RELATIVE: howto manager. (line 2951) +* BFD_RELOC_TILEPRO_SHAMT_X0: howto manager. (line 2990) +* BFD_RELOC_TILEPRO_SHAMT_X1: howto manager. (line 2991) +* BFD_RELOC_TILEPRO_SHAMT_Y0: howto manager. (line 2992) +* BFD_RELOC_TILEPRO_SHAMT_Y1: howto manager. (line 2993) +* BFD_RELOC_TILEPRO_TLS_DTPMOD32: howto manager. (line 3016) +* BFD_RELOC_TILEPRO_TLS_DTPOFF32: howto manager. (line 3017) +* BFD_RELOC_TILEPRO_TLS_GD_CALL: howto manager. (line 2994) +* BFD_RELOC_TILEPRO_TLS_IE_LOAD: howto manager. (line 2999) +* BFD_RELOC_TILEPRO_TLS_TPOFF32: howto manager. (line 3018) +* bfd_reloc_type_lookup: howto manager. (line 3163) +* BFD_RELOC_V850_16_GOT: howto manager. (line 1452) +* BFD_RELOC_V850_16_GOTOFF: howto manager. (line 1468) +* BFD_RELOC_V850_16_PCREL: howto manager. (line 1432) +* BFD_RELOC_V850_16_S1: howto manager. (line 1444) +* BFD_RELOC_V850_16_SPLIT_OFFSET: howto manager. (line 1442) +* BFD_RELOC_V850_17_PCREL: howto manager. (line 1434) +* BFD_RELOC_V850_22_PCREL: howto manager. (line 1386) +* BFD_RELOC_V850_22_PLT_PCREL: howto manager. (line 1456) +* BFD_RELOC_V850_23: howto manager. (line 1436) +* BFD_RELOC_V850_32_ABS: howto manager. (line 1440) +* BFD_RELOC_V850_32_GOT: howto manager. (line 1454) +* BFD_RELOC_V850_32_GOTOFF: howto manager. (line 1470) +* BFD_RELOC_V850_32_GOTPCREL: howto manager. (line 1450) +* BFD_RELOC_V850_32_PCREL: howto manager. (line 1438) +* BFD_RELOC_V850_32_PLT_PCREL: howto manager. (line 1458) +* BFD_RELOC_V850_9_PCREL: howto manager. (line 1384) +* BFD_RELOC_V850_ALIGN: howto manager. (line 1427) +* BFD_RELOC_V850_CALLT_15_16_OFFSET: howto manager. (line 1448) +* BFD_RELOC_V850_CALLT_16_16_OFFSET: howto manager. (line 1421) +* BFD_RELOC_V850_CALLT_6_7_OFFSET: howto manager. (line 1419) +* BFD_RELOC_V850_CODE: howto manager. (line 1472) +* BFD_RELOC_V850_COPY: howto manager. (line 1460) +* BFD_RELOC_V850_DATA: howto manager. (line 1474) +* BFD_RELOC_V850_GLOB_DAT: howto manager. (line 1462) +* BFD_RELOC_V850_JMP_SLOT: howto manager. (line 1464) +* BFD_RELOC_V850_LO16_S1: howto manager. (line 1446) +* BFD_RELOC_V850_LO16_SPLIT_OFFSET: howto manager. (line 1429) +* BFD_RELOC_V850_LONGCALL: howto manager. (line 1423) +* BFD_RELOC_V850_LONGJUMP: howto manager. (line 1425) +* BFD_RELOC_V850_RELATIVE: howto manager. (line 1466) +* BFD_RELOC_V850_SDA_15_16_OFFSET: howto manager. (line 1390) +* BFD_RELOC_V850_SDA_16_16_OFFSET: howto manager. (line 1388) +* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager. (line 1413) +* BFD_RELOC_V850_TDA_16_16_OFFSET: howto manager. (line 1406) +* BFD_RELOC_V850_TDA_4_4_OFFSET: howto manager. (line 1411) +* BFD_RELOC_V850_TDA_4_5_OFFSET: howto manager. (line 1408) +* BFD_RELOC_V850_TDA_6_8_OFFSET: howto manager. (line 1398) +* BFD_RELOC_V850_TDA_7_7_OFFSET: howto manager. (line 1404) +* BFD_RELOC_V850_TDA_7_8_OFFSET: howto manager. (line 1401) +* BFD_RELOC_V850_ZDA_15_16_OFFSET: howto manager. (line 1395) +* BFD_RELOC_V850_ZDA_16_16_OFFSET: howto manager. (line 1393) +* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager. (line 1416) +* BFD_RELOC_VAX_GLOB_DAT: howto manager. (line 2356) +* BFD_RELOC_VAX_JMP_SLOT: howto manager. (line 2357) +* BFD_RELOC_VAX_RELATIVE: howto manager. (line 2358) +* BFD_RELOC_VISIUM_HI16: howto manager. (line 3153) +* BFD_RELOC_VISIUM_HI16_PCREL: howto manager. (line 3157) +* BFD_RELOC_VISIUM_IM16: howto manager. (line 3155) +* BFD_RELOC_VISIUM_IM16_PCREL: howto manager. (line 3159) +* BFD_RELOC_VISIUM_LO16: howto manager. (line 3154) +* BFD_RELOC_VISIUM_LO16_PCREL: howto manager. (line 3158) +* BFD_RELOC_VISIUM_REL16: howto manager. (line 3156) +* BFD_RELOC_VPE4KMATH_DATA: howto manager. (line 1959) +* BFD_RELOC_VPE4KMATH_INSN: howto manager. (line 1960) +* BFD_RELOC_VTABLE_ENTRY: howto manager. (line 1963) +* BFD_RELOC_VTABLE_INHERIT: howto manager. (line 1962) +* BFD_RELOC_X86_64_32S: howto manager. (line 553) +* BFD_RELOC_X86_64_COPY: howto manager. (line 548) +* BFD_RELOC_X86_64_DTPMOD64: howto manager. (line 554) +* BFD_RELOC_X86_64_DTPOFF32: howto manager. (line 559) +* BFD_RELOC_X86_64_DTPOFF64: howto manager. (line 555) +* BFD_RELOC_X86_64_GLOB_DAT: howto manager. (line 549) +* BFD_RELOC_X86_64_GOT32: howto manager. (line 546) +* BFD_RELOC_X86_64_GOT64: howto manager. (line 564) +* BFD_RELOC_X86_64_GOTOFF64: howto manager. (line 562) +* BFD_RELOC_X86_64_GOTPC32: howto manager. (line 563) +* BFD_RELOC_X86_64_GOTPC32_TLSDESC: howto manager. (line 569) +* BFD_RELOC_X86_64_GOTPC64: howto manager. (line 566) +* BFD_RELOC_X86_64_GOTPCREL: howto manager. (line 552) +* BFD_RELOC_X86_64_GOTPCREL64: howto manager. (line 565) +* BFD_RELOC_X86_64_GOTPCRELX: howto manager. (line 575) +* BFD_RELOC_X86_64_GOTPLT64: howto manager. (line 567) +* BFD_RELOC_X86_64_GOTTPOFF: howto manager. (line 560) +* BFD_RELOC_X86_64_IRELATIVE: howto manager. (line 572) +* BFD_RELOC_X86_64_JUMP_SLOT: howto manager. (line 550) +* BFD_RELOC_X86_64_PC32_BND: howto manager. (line 573) +* BFD_RELOC_X86_64_PLT32: howto manager. (line 547) +* BFD_RELOC_X86_64_PLT32_BND: howto manager. (line 574) +* BFD_RELOC_X86_64_PLTOFF64: howto manager. (line 568) +* BFD_RELOC_X86_64_RELATIVE: howto manager. (line 551) +* BFD_RELOC_X86_64_REX_GOTPCRELX: howto manager. (line 576) +* BFD_RELOC_X86_64_TLSDESC: howto manager. (line 571) +* BFD_RELOC_X86_64_TLSDESC_CALL: howto manager. (line 570) +* BFD_RELOC_X86_64_TLSGD: howto manager. (line 557) +* BFD_RELOC_X86_64_TLSLD: howto manager. (line 558) +* BFD_RELOC_X86_64_TPOFF32: howto manager. (line 561) +* BFD_RELOC_X86_64_TPOFF64: howto manager. (line 556) +* BFD_RELOC_XC16X_PAG: howto manager. (line 2351) +* BFD_RELOC_XC16X_POF: howto manager. (line 2352) +* BFD_RELOC_XC16X_SEG: howto manager. (line 2353) +* BFD_RELOC_XC16X_SOF: howto manager. (line 2354) +* BFD_RELOC_XGATE_24: howto manager. (line 2106) +* BFD_RELOC_XGATE_GPAGE: howto manager. (line 2104) +* BFD_RELOC_XGATE_IMM3: howto manager. (line 2118) +* BFD_RELOC_XGATE_IMM4: howto manager. (line 2120) +* BFD_RELOC_XGATE_IMM5: howto manager. (line 2122) +* BFD_RELOC_XGATE_IMM8_HI: howto manager. (line 2115) +* BFD_RELOC_XGATE_IMM8_LO: howto manager. (line 2112) +* BFD_RELOC_XGATE_LO16: howto manager. (line 2101) +* BFD_RELOC_XGATE_PCREL_10: howto manager. (line 2110) +* BFD_RELOC_XGATE_PCREL_9: howto manager. (line 2108) +* BFD_RELOC_XGATE_RL_GROUP: howto manager. (line 2097) +* BFD_RELOC_XGATE_RL_JUMP: howto manager. (line 2094) +* BFD_RELOC_XSTORMY16_12: howto manager. (line 2345) +* BFD_RELOC_XSTORMY16_24: howto manager. (line 2346) +* BFD_RELOC_XSTORMY16_FPTR16: howto manager. (line 2347) +* BFD_RELOC_XSTORMY16_REL_12: howto manager. (line 2344) +* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 2514) +* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 2518) +* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 2465) +* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 2466) +* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 2464) +* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 2456) +* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 2457) +* BFD_RELOC_XTENSA_OP0: howto manager. (line 2509) +* BFD_RELOC_XTENSA_OP1: howto manager. (line 2510) +* BFD_RELOC_XTENSA_OP2: howto manager. (line 2511) +* BFD_RELOC_XTENSA_PLT: howto manager. (line 2460) +* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 2458) +* BFD_RELOC_XTENSA_RTLD: howto manager. (line 2452) +* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 2492) +* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 2473) +* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 2502) +* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 2483) +* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 2503) +* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 2484) +* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 2504) +* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 2485) +* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 2505) +* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 2486) +* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 2506) +* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 2487) +* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 2493) +* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 2474) +* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 2494) +* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 2475) +* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 2495) +* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 2476) +* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 2496) +* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 2477) +* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 2497) +* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 2478) +* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 2498) +* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 2479) +* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 2499) +* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 2480) +* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 2500) +* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 2481) +* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 2501) +* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 2482) +* BFD_RELOC_XTENSA_TLSDESC_ARG: howto manager. (line 2523) +* BFD_RELOC_XTENSA_TLSDESC_FN: howto manager. (line 2522) +* BFD_RELOC_XTENSA_TLS_ARG: howto manager. (line 2527) +* BFD_RELOC_XTENSA_TLS_CALL: howto manager. (line 2528) +* BFD_RELOC_XTENSA_TLS_DTPOFF: howto manager. (line 2524) +* BFD_RELOC_XTENSA_TLS_FUNC: howto manager. (line 2526) +* BFD_RELOC_XTENSA_TLS_TPOFF: howto manager. (line 2525) +* BFD_RELOC_Z80_DISP8: howto manager. (line 2530) +* BFD_RELOC_Z8K_CALLR: howto manager. (line 2534) +* BFD_RELOC_Z8K_DISP7: howto manager. (line 2532) +* BFD_RELOC_Z8K_IMM4L: howto manager. (line 2536) * bfd_rename_section: section prototypes. (line 177) -* bfd_scan_arch: Architectures. (line 527) +* bfd_scan_arch: Architectures. (line 543) * bfd_scan_vma: Miscellaneous. (line 124) -* bfd_seach_for_target: bfd_target. (line 525) * bfd_sections_find_if: section prototypes. (line 207) * bfd_section_already_linked: Writing the symbol table. (line 55) * bfd_section_list_clear: section prototypes. (line 7) * bfd_set_archive_head: Archives. (line 74) -* bfd_set_arch_info: Architectures. (line 568) +* bfd_set_arch_info: Architectures. (line 584) * bfd_set_assert_handler: Error reporting. (line 143) -* bfd_set_default_target: bfd_target. (line 464) +* bfd_set_default_target: bfd_target. (line 468) * bfd_set_error: Error reporting. (line 57) * bfd_set_error_handler: Error reporting. (line 100) * bfd_set_error_program_name: Error reporting. (line 109) @@ -13559,7 +13620,7 @@ BFD Index (line 63) * bfd_symbol_info: symbol handling functions. (line 135) -* bfd_target_list: bfd_target. (line 516) +* bfd_target_list: bfd_target. (line 520) * bfd_update_compression_header: Miscellaneous. (line 364) * bfd_write_bigendian_4byte_int: Internal. (line 12) * bfd_zalloc: Opening and Closing. @@ -13601,61 +13662,61 @@ Node: BFD information loss6247 Node: Canonical format8788 Node: BFD front end13165 Node: typedef bfd13589 -Node: Error reporting25551 -Node: Miscellaneous30413 -Node: Memory Usage49454 -Node: Initialization50685 -Node: Sections51144 -Node: Section Input51627 -Node: Section Output52996 -Node: typedef asection55483 -Node: section prototypes82211 -Node: Symbols92818 -Node: Reading Symbols94421 -Node: Writing Symbols95529 -Node: Mini Symbols97273 -Node: typedef asymbol98247 -Node: symbol handling functions104289 -Node: Archives109627 -Node: Formats113655 -Node: Relocations116606 -Node: typedef arelent117333 -Node: howto manager132989 -Node: Core Files254266 -Node: Targets256304 -Node: bfd_target258279 -Node: Architectures281610 -Node: Opening and Closing309745 -Node: Internal324060 -Node: File Caching330409 -Node: Linker Functions332327 -Node: Creating a Linker Hash Table334001 -Node: Adding Symbols to the Hash Table335740 -Node: Differing file formats336640 -Node: Adding symbols from an object file338365 -Node: Adding symbols from an archive340515 -Node: Performing the Final Link342861 -Node: Information provided by the linker344102 -Node: Relocating the section contents345256 -Node: Writing the symbol table347008 -Node: Hash Tables351394 -Node: Creating and Freeing a Hash Table352592 -Node: Looking Up or Entering a String353842 -Node: Traversing a Hash Table355095 -Node: Deriving a New Hash Table Type355884 -Node: Define the Derived Structures356950 -Node: Write the Derived Creation Routine358031 -Node: Write Other Derived Routines360655 -Node: BFD back ends361970 -Node: What to Put Where362240 -Node: aout362420 -Node: coff368763 -Node: elf397633 -Node: mmo398034 -Node: File layout398904 -Node: Symbol-table404818 -Node: mmo section mapping408581 -Node: GNU Free Documentation License412235 -Node: BFD Index437299 +Node: Error reporting25893 +Node: Miscellaneous30755 +Node: Memory Usage49796 +Node: Initialization51027 +Node: Sections51486 +Node: Section Input51969 +Node: Section Output53338 +Node: typedef asection55825 +Node: section prototypes82558 +Node: Symbols93165 +Node: Reading Symbols94768 +Node: Writing Symbols95876 +Node: Mini Symbols97620 +Node: typedef asymbol98594 +Node: symbol handling functions104650 +Node: Archives109988 +Node: Formats114016 +Node: Relocations116967 +Node: typedef arelent117694 +Node: howto manager133350 +Node: Core Files254804 +Node: Targets256842 +Node: bfd_target258817 +Node: Architectures282306 +Node: Opening and Closing311551 +Node: Internal325866 +Node: File Caching332215 +Node: Linker Functions334133 +Node: Creating a Linker Hash Table335807 +Node: Adding Symbols to the Hash Table337546 +Node: Differing file formats338446 +Node: Adding symbols from an object file340171 +Node: Adding symbols from an archive342321 +Node: Performing the Final Link344667 +Node: Information provided by the linker345908 +Node: Relocating the section contents347062 +Node: Writing the symbol table348814 +Node: Hash Tables353928 +Node: Creating and Freeing a Hash Table355126 +Node: Looking Up or Entering a String356376 +Node: Traversing a Hash Table357629 +Node: Deriving a New Hash Table Type358418 +Node: Define the Derived Structures359484 +Node: Write the Derived Creation Routine360565 +Node: Write Other Derived Routines363189 +Node: BFD back ends364504 +Node: What to Put Where364774 +Node: aout364954 +Node: coff371297 +Node: elf400167 +Node: mmo400568 +Node: File layout401438 +Node: Symbol-table407352 +Node: mmo section mapping411115 +Node: GNU Free Documentation License414769 +Node: BFD Index439833  End Tag Table diff --git a/bfd/doc/bfdt.texi b/bfd/doc/bfdt.texi index 8f886cb..3d5e506 100644 --- a/bfd/doc/bfdt.texi +++ b/bfd/doc/bfdt.texi @@ -21,7 +21,7 @@ enum bfd_direction enum bfd_plugin_format @{ - bfd_plugin_uknown = 0, + bfd_plugin_unknown = 0, bfd_plugin_yes = 1, bfd_plugin_no = 2 @}; @@ -66,7 +66,7 @@ struct bfd ENUM_BITFIELD (bfd_direction) direction : 2; /* Format_specific flags. */ - flagword flags : 18; + flagword flags : 20; /* 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 @@ -146,16 +146,23 @@ struct bfd /* Compress sections in this BFD with SHF_COMPRESSED from gABI. */ #define BFD_COMPRESS_GABI 0x20000 + /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this + BFD. */ +#define BFD_CONVERT_ELF_COMMON 0x40000 + + /* Use the ELF STT_COMMON type in this BFD. */ +#define BFD_USE_ELF_STT_COMMON 0x80000 + /* Flags bits to be saved in bfd_preserve_save. */ #define BFD_FLAGS_SAVED \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN \ - | BFD_COMPRESS_GABI) + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) /* Flags bits which are for BFD use only. */ #define BFD_FLAGS_FOR_BFD_USE_MASK \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ - | BFD_COMPRESS_GABI) + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) /* Is the file descriptor being cached? That is, can it be closed as needed, and re-opened when accessed later? */ diff --git a/bfd/doc/bfdver.texi b/bfd/doc/bfdver.texi index d3fcb27..8c6bb8d 100644 --- a/bfd/doc/bfdver.texi +++ b/bfd/doc/bfdver.texi @@ -1,4 +1,4 @@ -@set VERSION 2.26.51 +@set VERSION 2.27.51 @set VERSION_PACKAGE (GNU Binutils) -@set UPDATED May 2016 +@set UPDATED October 2016 @set BUGURL @uref{http://www.sourceware.org/bugzilla/} diff --git a/bfd/doc/linker.texi b/bfd/doc/linker.texi index 81c208b..5341692 100644 --- a/bfd/doc/linker.texi +++ b/bfd/doc/linker.texi @@ -418,3 +418,29 @@ bfd_boolean bfd_hide_sym_by_version Search an elf version script tree for symbol versioning info for a given symbol. Return TRUE if the symbol is hidden. +@findex bfd_link_check_relocs +@subsubsection @code{bfd_link_check_relocs} +@strong{Synopsis} +@example +bfd_boolean bfd_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); +@end example +@strong{Description}@* +Checks the relocs in ABFD for validity. +Does not execute the relocs. +Return TRUE if everything is OK, FALSE otherwise. +This is the external entry point to this code. + +@findex _bfd_generic_link_check_relocs +@subsubsection @code{_bfd_generic_link_check_relocs} +@strong{Synopsis} +@example +bfd_boolean _bfd_generic_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); +@end example +@strong{Description}@* +Stub function for targets that do not implement reloc checking. +Return TRUE. +This is an internal function. It should not be called from +outside the BFD library. + diff --git a/bfd/doc/reloc.texi b/bfd/doc/reloc.texi index 349544c..e6b55a0 100644 --- a/bfd/doc/reloc.texi +++ b/bfd/doc/reloc.texi @@ -884,6 +884,9 @@ Relocation against a MIPS literal section. @deffnx {} BFD_RELOC_MICROMIPS_16_PCREL_S1 microMIPS PC-relative relocations. @end deffn +@deffn {} BFD_RELOC_MIPS16_16_PCREL_S1 +MIPS16 PC-relative relocation. +@end deffn @deffn {} BFD_RELOC_MIPS_21_PCREL_S2 @deffnx {} BFD_RELOC_MIPS_26_PCREL_S2 @deffnx {} BFD_RELOC_MIPS_18_PCREL_S3 @@ -1611,6 +1614,7 @@ Renesas / SuperH SH relocs. Not all of these appear in object files. @deffnx {} BFD_RELOC_ARC_TLS_LE_32 @deffnx {} BFD_RELOC_ARC_S25W_PCREL_PLT @deffnx {} BFD_RELOC_ARC_S21H_PCREL_PLT +@deffnx {} BFD_RELOC_ARC_NPS_CMEM16 ARC relocs. @end deffn @deffn {} BFD_RELOC_BFIN_16_IMM @@ -3604,6 +3608,9 @@ relocation enumerators. N.B. the order of the enumerators is important as several tables in the AArch64 bfd backend are indexed by these enumerators; make sure they are all synced. @end deffn +@deffn {} BFD_RELOC_AARCH64_NULL +Deprecated AArch64 null relocation code. +@end deffn @deffn {} BFD_RELOC_AARCH64_NONE AArch64 null relocation code. @end deffn diff --git a/bfd/doc/section.texi b/bfd/doc/section.texi index 20ba3cb..400ae2d 100644 --- a/bfd/doc/section.texi +++ b/bfd/doc/section.texi @@ -320,8 +320,8 @@ typedef struct bfd_section when memory read flag isn't set. */ #define SEC_COFF_NOREAD 0x40000000 - /* Indicate that section has the no read flag set. */ -#define SEC_ELF_NOREAD 0x80000000 + /* Indicate that section has the purecode flag set. */ +#define SEC_ELF_PURECODE 0x80000000 /* End of section flags. */ @@ -389,7 +389,7 @@ typedef struct bfd_section information. */ bfd_vma lma; - /* The size of the section in octets, as it will be output. + /* The size of the section in *octets*, as it will be output. Contains a value even if the section has no contents (e.g., the size of @code{.bss}). */ bfd_size_type size; diff --git a/bfd/doc/syms.texi b/bfd/doc/syms.texi index 6834d10..a5e522b 100644 --- a/bfd/doc/syms.texi +++ b/bfd/doc/syms.texi @@ -178,8 +178,7 @@ typedef struct bfd_symbol #define BSF_EXPORT BSF_GLOBAL /* No real difference. */ /* A normal C symbol would be one of: - @code{BSF_LOCAL}, @code{BSF_COMMON}, @code{BSF_UNDEFINED} or - @code{BSF_GLOBAL}. */ + @code{BSF_LOCAL}, @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. */ @@ -191,7 +190,9 @@ typedef struct bfd_symbol /* Used by the linker. */ #define BSF_KEEP (1 << 5) -#define BSF_KEEP_G (1 << 6) + + /* An ELF common symbol. */ +#define BSF_ELF_COMMON (1 << 6) /* A weak global symbol, overridable without warnings by a regular global symbol of the same name. */ diff --git a/bfd/doc/targets.texi b/bfd/doc/targets.texi index f4b72b9..e6efb6b 100644 --- a/bfd/doc/targets.texi +++ b/bfd/doc/targets.texi @@ -424,6 +424,7 @@ BFD_JUMP_TABLE macros. NAME##_bfd_copy_link_hash_symbol_type, \ NAME##_bfd_final_link, \ NAME##_bfd_link_split_section, \ + NAME##_bfd_link_check_relocs, \ NAME##_bfd_gc_sections, \ NAME##_bfd_lookup_section_flags, \ NAME##_bfd_merge_sections, \ @@ -465,6 +466,9 @@ BFD_JUMP_TABLE macros. /* Should this section be split up into smaller pieces during linking. */ bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); + /* Check the relocations in the bfd for validity. */ + bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *); + /* Remove sections that are not referenced from the output. */ bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); @@ -602,20 +606,19 @@ Return a freshly malloced NULL-terminated vector of the names of all the valid BFD targets. Do not modify the names. -@findex bfd_seach_for_target -@subsubsection @code{bfd_seach_for_target} +@findex bfd_iterate_over_targets +@subsubsection @code{bfd_iterate_over_targets} @strong{Synopsis} @example -const bfd_target *bfd_search_for_target - (int (*search_func) (const bfd_target *, void *), - void *); +const bfd_target *bfd_iterate_over_targets + (int (*func) (const bfd_target *, void *), + void *data); @end example @strong{Description}@* -Return a pointer to the first transfer vector in the list of -transfer vectors maintained by BFD that produces a non-zero -result when passed to the function @var{search_func}. The -parameter @var{data} is passed, unexamined, to the search -function. +Call @var{func} for each target in the list of BFD target +vectors, passing @var{data} to @var{func}. Stop iterating if +@var{func} returns a non-zero result, and return that target +vector. Return NULL if @var{func} always returns zero. @findex bfd_flavour_name @subsubsection @code{bfd_flavour_name} diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 4d6f8fc..33370ac 100644 --- a/bfd/dwarf2.c +++ b/bfd/dwarf2.c @@ -1003,7 +1003,7 @@ read_attribute_value (struct attribute * attr, struct dwarf_block *blk; bfd_size_type amt; - if (info_ptr >= info_ptr_end) + if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present) { (*_bfd_error_handler) (_("Dwarf Error: Info pointer extends beyond end of attributes")); bfd_set_error (bfd_error_bad_value); @@ -2757,11 +2757,18 @@ parse_comp_unit (struct dwarf2_debug *stash, if (version != 2 && version != 3 && version != 4) { - (*_bfd_error_handler) - (_("Dwarf Error: found dwarf version '%u', this reader" - " only handles version 2, 3 and 4 information."), version); - bfd_set_error (bfd_error_bad_value); - return 0; + /* PR 19872: A version number of 0 probably means that there is padding + at the end of the .debug_info section. Gold puts it there when + performing an incremental link, for example. So do not generate + an error, just return a NULL. */ + if (version) + { + (*_bfd_error_handler) + (_("Dwarf Error: found dwarf version '%u', this reader" + " only handles version 2, 3 and 4 information."), version); + bfd_set_error (bfd_error_bad_value); + } + return NULL; } if (addr_size > sizeof (bfd_vma)) @@ -2772,7 +2779,7 @@ parse_comp_unit (struct dwarf2_debug *stash, addr_size, (unsigned int) sizeof (bfd_vma)); bfd_set_error (bfd_error_bad_value); - return 0; + return NULL; } if (addr_size != 2 && addr_size != 4 && addr_size != 8) @@ -2781,22 +2788,23 @@ parse_comp_unit (struct dwarf2_debug *stash, ("Dwarf Error: found address size '%u', this reader" " can only handle address sizes '2', '4' and '8'.", addr_size); bfd_set_error (bfd_error_bad_value); - return 0; + return NULL; } /* Read the abbrevs for this compilation unit into a table. */ abbrevs = read_abbrevs (abfd, abbrev_offset, stash); if (! abbrevs) - return 0; + return NULL; abbrev_number = safe_read_leb128 (abfd, info_ptr, &bytes_read, FALSE, end_ptr); info_ptr += bytes_read; if (! abbrev_number) { - (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."), - abbrev_number); - bfd_set_error (bfd_error_bad_value); - return 0; + /* PR 19872: An abbrev number of 0 probably means that there is padding + at the end of the .debug_abbrev section. Gold puts it there when + performing an incremental link, for example. So do not generate + an error, just return a NULL. */ + return NULL; } abbrev = lookup_abbrev (abbrev_number, abbrevs); @@ -2805,7 +2813,7 @@ parse_comp_unit (struct dwarf2_debug *stash, (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number); bfd_set_error (bfd_error_bad_value); - return 0; + return NULL; } amt = sizeof (struct comp_unit); diff --git a/bfd/ecoff.c b/bfd/ecoff.c index 031abdf..4515172 100644 --- a/bfd/ecoff.c +++ b/bfd/ecoff.c @@ -3544,9 +3544,9 @@ ecoff_link_check_archive_element (bfd *abfd, if (h->type != bfd_link_hash_undefined) return TRUE; - /* Include this element. */ + /* Include this element? */ if (!(*info->callbacks->add_archive_element) (info, abfd, name, &abfd)) - return FALSE; + return TRUE; *pneeded = TRUE; return ecoff_link_add_object_symbols (abfd, info); @@ -4015,17 +4015,12 @@ ecoff_reloc_link_order (bfd *output_bfd, case bfd_reloc_outofrange: abort (); case bfd_reloc_overflow: - if (! ((*info->callbacks->reloc_overflow) - (info, NULL, - (link_order->type == bfd_section_reloc_link_order - ? bfd_section_name (output_bfd, section) - : link_order->u.reloc.p->u.name), - rel.howto->name, addend, NULL, - NULL, (bfd_vma) 0))) - { - free (buf); - return FALSE; - } + (*info->callbacks->reloc_overflow) + (info, NULL, + (link_order->type == bfd_section_reloc_link_order + ? bfd_section_name (output_bfd, section) + : link_order->u.reloc.p->u.name), + rel.howto->name, addend, NULL, NULL, (bfd_vma) 0); break; } ok = bfd_set_section_contents (output_bfd, output_section, (void *) buf, @@ -4055,10 +4050,8 @@ ecoff_reloc_link_order (bfd *output_bfd, in.r_symndx = h->indx; else { - if (! ((*info->callbacks->unattached_reloc) - (info, link_order->u.reloc.p->u.name, NULL, - NULL, (bfd_vma) 0))) - return FALSE; + (*info->callbacks->unattached_reloc) + (info, link_order->u.reloc.p->u.name, NULL, NULL, (bfd_vma) 0); in.r_symndx = 0; } in.r_extern = 1; diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 6a04f04..bb3371f 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -124,7 +124,8 @@ struct elf_link_hash_entry struct bfd_link_hash_entry root; /* Symbol index in output file. This is initialized to -1. It is - set to -2 if the symbol is used by a reloc. */ + set to -2 if the symbol is used by a reloc. It is set to -3 if + this symbol is defined in a discarded section. */ long indx; /* Symbol index as a dynamic symbol. Initialized to -1, and remains @@ -520,8 +521,8 @@ struct elf_link_hash_table union gotplt_union init_got_offset; union gotplt_union init_plt_offset; - /* The number of symbols found in the link which must be put into - the .dynsym section. */ + /* The number of symbols found in the link which is intended for the + mandatory DT_SYMTAB tag (.dynsym section) in .dynamic section. */ bfd_size_type dynsymcount; /* The string table of dynamic symbols, which becomes the .dynstr @@ -702,9 +703,9 @@ struct elf_size_info { enum elf_reloc_type_class { reloc_class_normal, reloc_class_relative, - reloc_class_plt, reloc_class_copy, - reloc_class_ifunc + reloc_class_ifunc, + reloc_class_plt }; struct elf_reloc_cookie @@ -731,15 +732,15 @@ typedef enum { struct bfd_elf_special_section { const char *prefix; - int prefix_length; + unsigned int prefix_length; /* 0 means name must match PREFIX exactly. -1 means name must start with PREFIX followed by an arbitrary string. -2 means name must match PREFIX exactly or consist of PREFIX followed by a dot then anything. > 0 means name must start with the first PREFIX_LENGTH chars of PREFIX and finish with the last SUFFIX_LENGTH chars of PREFIX. */ - int suffix_length; - int type; + signed int suffix_length; + unsigned int type; bfd_vma attr; }; @@ -1125,6 +1126,11 @@ struct elf_backend_data bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *)); + /* Filter what symbols of the output file to include in the import + library if one is created. */ + unsigned int (*elf_backend_filter_implib_symbols) + (bfd *, struct bfd_link_info *, asymbol **, long); + /* 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 @@ -1300,6 +1306,16 @@ struct elf_backend_data /* Return the section which RELOC_SEC applies to. */ asection *(*get_reloc_section) (asection *reloc_sec); + /* Called to set the sh_flags, sh_link and sh_info fields of OSECTION which + has a type >= SHT_LOOS. Returns TRUE if the fields were initialised, + FALSE otherwise. Can be called multiple times for a given section, + until it returns TRUE. Most of the times it is called ISECTION will be + set to an input section that might be associated with the output section. + The last time that it is called, ISECTION will be set to NULL. */ + bfd_boolean (*elf_backend_copy_special_section_fields) + (const bfd *ibfd, bfd *obfd, const Elf_Internal_Shdr *isection, + Elf_Internal_Shdr *osection); + /* Used to handle bad SHF_LINK_ORDER input. */ bfd_error_handler_type link_order_error_handler; @@ -1361,6 +1377,9 @@ struct elf_backend_data /* Alignment for the PT_GNU_STACK segment. */ unsigned stack_align; + /* Flag bits to assign to a section of type SHT_STRTAB. */ + unsigned long elf_strtab_flags; + /* 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 @@ -1937,6 +1956,8 @@ extern bfd_boolean _bfd_elf_section_already_linked (bfd *, asection *, struct bfd_link_info *); extern void bfd_elf_set_group_contents (bfd *, asection *, void *); +extern unsigned int _bfd_elf_filter_global_symbols + (bfd *, struct bfd_link_info *, asymbol **, long); extern asection *_bfd_elf_check_kept_section (asection *, struct bfd_link_info *); #define _bfd_elf_link_just_syms _bfd_generic_link_just_syms @@ -2035,22 +2056,24 @@ extern struct elf_strtab_hash * _bfd_elf_strtab_init (void); extern void _bfd_elf_strtab_free (struct elf_strtab_hash *); -extern bfd_size_type _bfd_elf_strtab_add +extern size_t _bfd_elf_strtab_add (struct elf_strtab_hash *, const char *, bfd_boolean); extern void _bfd_elf_strtab_addref - (struct elf_strtab_hash *, bfd_size_type); + (struct elf_strtab_hash *, size_t); extern void _bfd_elf_strtab_delref - (struct elf_strtab_hash *, bfd_size_type); + (struct elf_strtab_hash *, size_t); extern unsigned int _bfd_elf_strtab_refcount - (struct elf_strtab_hash *, bfd_size_type); + (struct elf_strtab_hash *, size_t); extern void _bfd_elf_strtab_clear_all_refs - (struct elf_strtab_hash *tab); -extern void _bfd_elf_strtab_restore_size - (struct elf_strtab_hash *, bfd_size_type); + (struct elf_strtab_hash *); +extern void *_bfd_elf_strtab_save + (struct elf_strtab_hash *); +extern void _bfd_elf_strtab_restore + (struct elf_strtab_hash *, void *); extern bfd_size_type _bfd_elf_strtab_size (struct elf_strtab_hash *); extern bfd_size_type _bfd_elf_strtab_offset - (struct elf_strtab_hash *, bfd_size_type); + (struct elf_strtab_hash *, size_t); extern bfd_boolean _bfd_elf_strtab_emit (bfd *, struct elf_strtab_hash *); extern void _bfd_elf_strtab_finalize @@ -2250,6 +2273,8 @@ extern bfd_boolean bfd_elf_link_add_symbols (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_elf_add_dynamic_entry (struct bfd_link_info *, bfd_vma, bfd_vma); +extern bfd_boolean _bfd_elf_link_check_relocs + (bfd *, struct bfd_link_info *); extern bfd_boolean bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *, struct elf_link_hash_entry *); @@ -2323,6 +2348,9 @@ extern bfd_boolean bfd_elf_gc_common_finalize_got_offsets extern bfd_boolean bfd_elf_gc_common_final_link (bfd *, struct bfd_link_info *); +extern asection *_bfd_elf_is_start_stop + (const struct bfd_link_info *, struct elf_link_hash_entry *); + extern bfd_boolean bfd_elf_reloc_symbol_deleted_p (bfd_vma, void *); @@ -2347,6 +2375,15 @@ extern bfd_boolean bfd_elf_lookup_section_flags extern Elf_Internal_Phdr * _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section); +/* PowerPC @tls opcode transform/validate. */ +extern unsigned int _bfd_elf_ppc_at_tls_transform + (unsigned int, unsigned int); +/* PowerPC @tprel opcode transform/validate. */ +extern unsigned int _bfd_elf_ppc_at_tprel_transform + (unsigned int, unsigned int); +/* PowerPC elf_object_p tweak. */ +extern bfd_boolean _bfd_elf_ppc_set_arch (bfd *); + /* Exported interface for writing elf corefile notes. */ extern char *elfcore_write_note (bfd *, char *, int *, const char *, int, const void *, int); @@ -2490,7 +2527,8 @@ extern bfd_boolean _bfd_elf_create_ifunc_sections (bfd *, struct bfd_link_info *); 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, unsigned int); + struct elf_dyn_relocs **, bfd_boolean *, unsigned int, + unsigned int, unsigned int, bfd_boolean); extern long _bfd_elf_ifunc_get_synthetic_symtab (bfd *, long, asymbol **, long, asymbol **, asymbol **, asection *, bfd_vma *(*) (bfd *, asymbol **, asection *, asection *)); @@ -2574,12 +2612,11 @@ extern asection _bfd_elf_large_com_section; 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; \ + (*info->callbacks->undefined_symbol) (info, \ + h->root.root.string, \ + input_bfd, \ + input_section, \ + rel->r_offset, err); \ warned = TRUE; \ } \ (void) unresolved_reloc; \ diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index 0500cd3..e787ee9 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -1369,14 +1369,26 @@ _bfd_elf_discard_section_eh_frame && ent->make_relative == 0) || (ent->fde_encoding & 0x70) == DW_EH_PE_aligned)) { + static int num_warnings_issued = 0; + /* 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->u.dwarf.table = FALSE; - (*info->callbacks->einfo) - (_("%P: FDE encoding in %B(%A) prevents .eh_frame_hdr" - " table being created.\n"), abfd, sec); + if (num_warnings_issued < 10) + { + (*info->callbacks->einfo) + (_("%P: FDE encoding in %B(%A) prevents .eh_frame_hdr" + " table being created.\n"), abfd, sec); + num_warnings_issued ++; + } + else if (num_warnings_issued == 10) + { + (*info->callbacks->einfo) + (_("%P: Further warnings about FDE encoding preventing .eh_frame_hdr generation dropped.\n")); + num_warnings_issued ++; + } } ent->removed = 0; hdr_info->u.dwarf.fde_count++; diff --git a/bfd/elf-ifunc.c b/bfd/elf-ifunc.c index 1368a8e..09cbf4a 100644 --- a/bfd/elf-ifunc.c +++ b/bfd/elf-ifunc.c @@ -55,7 +55,7 @@ _bfd_elf_create_ifunc_sections (bfd *abfd, struct bfd_link_info *info) if (bfd_link_pic (info)) { - /* We need to create .rel[a].ifunc for shared objects. */ + /* We need to create .rel[a].ifunc for PIC objects. */ const char *rel_sec = (bed->rela_plts_and_copies_p ? ".rela.ifunc" : ".rel.ifunc"); @@ -110,22 +110,29 @@ bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, struct elf_link_hash_entry *h, struct elf_dyn_relocs **head, + bfd_boolean *readonly_dynrelocs_against_ifunc_p, unsigned int plt_entry_size, unsigned int plt_header_size, - unsigned int got_entry_size) + unsigned int got_entry_size, + bfd_boolean avoid_plt) { 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 (!bfd_link_pic (info) + bfd_boolean readonly_dynrelocs_against_ifunc; + /* If AVOID_PLT is TRUE, don't use PLT if possible. */ + bfd_boolean use_plt = !avoid_plt || h->plt.refcount > 0; + bfd_boolean need_dynreloc = !use_plt || bfd_link_pic (info); + + /* When a PIC object references a STT_GNU_IFUNC symbol defined + in executable or it isn't referenced via PLT, the address of + the resolved function may be used. But in non-PIC executable, + the address of its .plt slot may be used. Pointer equality may + not work correctly. PIE or non-PLT reference should be used if + pointer equality is required here. */ + if (!need_dynreloc && (h->dynindx != -1 || info->export_dynamic) && h->pointer_equality_needed) @@ -142,16 +149,30 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, htab = elf_hash_table (info); - /* When building shared library, we need to handle the case where it is - marked with regular reference, but not non-GOT reference since the - non-GOT reference bit may not be set here. */ - if (bfd_link_pic (info) && !h->non_got_ref && h->ref_regular) - for (p = *head; p != NULL; p = p->next) - if (p->count) - { - h->non_got_ref = 1; - goto keep; - } + /* When the symbol is marked with regular reference, if PLT isn't used + or we are building a PIC object, we must keep dynamic relocation + if there is non-GOT reference and use PLT if there is PC-relative + reference. */ + if (need_dynreloc && h->ref_regular) + { + bfd_boolean keep = FALSE; + for (p = *head; p != NULL; p = p->next) + if (p->count) + { + h->non_got_ref = 1; + /* Need dynamic relocations for non-GOT reference. */ + keep = TRUE; + if (p->pc_count) + { + /* Must use PLT for PC-relative reference. */ + use_plt = TRUE; + need_dynreloc = bfd_link_pic (info); + break; + } + } + if (keep) + goto keep; + } /* Support garbage collection against STT_GNU_IFUNC symbols. */ if (h->plt.refcount <= 0 && h->got.refcount <= 0) @@ -163,7 +184,7 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, } /* Return and discard space for dynamic relocations against it if - it is never referenced in a non-shared object. */ + it is never referenced. */ if (!h->ref_regular) { if (h->plt.refcount > 0 @@ -190,9 +211,9 @@ keep: gotplt = htab->sgotplt; relplt = htab->srelplt; - /* If this is the first .plt entry, make room for the special - first entry. */ - if (plt->size == 0) + /* If this is the first .plt entry and PLT is used, make room for + the special first entry. */ + if (plt->size == 0 && use_plt) plt->size += plt_header_size; } else @@ -202,28 +223,35 @@ keep: 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; + if (use_plt) + { + /* 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; + /* 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 .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++; + section for GOTPLT relocation if PLT is used. */ + if (use_plt) + { + 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 (!bfd_link_pic (info) - || !h->non_got_ref) + there is a non-GOT reference in a PIC object or PLT isn't used. */ + if (!need_dynreloc || !h->non_got_ref) *head = NULL; + readonly_dynrelocs_against_ifunc = FALSE; + /* Finally, allocate space. */ p = *head; if (p != NULL) @@ -231,44 +259,97 @@ keep: bfd_size_type count = 0; do { + if (!readonly_dynrelocs_against_ifunc) + { + asection *s = p->sec->output_section; + if (s != NULL && (s->flags & SEC_READONLY) != 0) + readonly_dynrelocs_against_ifunc = TRUE; + } count += p->count; p = p->next; } while (p != NULL); - htab->irelifunc->size += count * sizeof_reloc; + + /* Dynamic relocations are stored in + 1. .rel[a].ifunc section in PIC object. + 2. .rel[a].got section in dynamic executable. + 3. .rel[a].iplt section in static executable. */ + if (bfd_link_pic (info)) + htab->irelifunc->size += count * sizeof_reloc; + else if (htab->splt != NULL) + htab->srelgot->size += count * sizeof_reloc; + else + { + relplt->size += count * sizeof_reloc; + relplt->reloc_count += count; + } } + if (readonly_dynrelocs_against_ifunc_p) + *readonly_dynrelocs_against_ifunc_p = readonly_dynrelocs_against_ifunc; + /* For STT_GNU_IFUNC symbol, .got.plt has the real function address 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 + branch, it uses .got.plt. For symbol value, if PLT is used, + 1. Use .got.plt in a PIC object if it is forced local or not dynamic. - 2. Use .got.plt in a non-shared object if pointer equality isn't + 2. Use .got.plt in a non-PIC 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 (h->got.refcount <= 0 - || (bfd_link_pic (info) - && (h->dynindx == -1 - || h->forced_local)) - || (!bfd_link_pic (info) - && !h->pointer_equality_needed) - || bfd_link_pie (info) - || htab->sgot == NULL) + If PLT isn't used, always use .got for symbol value. + We only need to relocate .got entry in PIC object or in dynamic + executable without PLT. */ + if (use_plt + && (h->got.refcount <= 0 + || (bfd_link_pic (info) + && (h->dynindx == -1 + || h->forced_local)) + || (!bfd_link_pic (info) + && !h->pointer_equality_needed) + || bfd_link_pie (info) + || 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 (bfd_link_pic (info)) - htab->srelgot->size += sizeof_reloc; + if (!use_plt) + { + /* PLT isn't used. */ + h->plt.offset = (bfd_vma) -1; + } + if (h->got.refcount <= 0) + { + /* GOT isn't need when there are only relocations for static + pointers. */ + h->got.offset = (bfd_vma) -1; + } + else + { + h->got.offset = htab->sgot->size; + htab->sgot->size += got_entry_size; + /* Need to relocate the GOT entry in a PIC object or PLT isn't + used. Otherwise, the GOT entry will be filled with the PLT + entry and dynamic GOT relocation isn't needed. */ + if (need_dynreloc) + { + /* For non-static executable, dynamic GOT relocation is in + .rel[a].got section, but for static executable, it is + in .rel[a].iplt section. */ + if (htab->splt != NULL) + htab->srelgot->size += sizeof_reloc; + else + { + relplt->size += sizeof_reloc; + relplt->reloc_count++; + } + } + } } return TRUE; diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c index 871f676..c2e8b98 100644 --- a/bfd/elf-m10200.c +++ b/bfd/elf-m10200.c @@ -410,18 +410,15 @@ mn10200_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*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: - if (! ((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) (info, name, input_bfd, + input_section, + rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -441,10 +438,8 @@ mn10200_elf_relocate_section (bfd *output_bfd, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c index 949f14a..4b1ca58 100644 --- a/bfd/elf-m10300.c +++ b/bfd/elf-m10300.c @@ -2151,18 +2151,14 @@ mn10300_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root.root : NULL), name, - howto->name, (bfd_vma) 0, input_bfd, - input_section, rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root.root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: - if (! ((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -5462,15 +5458,13 @@ _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd, 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; + s = bfd_get_linker_section (dynobj, name); + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 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); + s = bfd_get_linker_section (dynobj, ".rela.plt"); dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -5485,7 +5479,7 @@ _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd, 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"); + s = bfd_get_linker_section (dynobj, ".rela.plt"); if (s != NULL) dyn.d_un.d_val -= s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); diff --git a/bfd/elf-s390-common.c b/bfd/elf-s390-common.c index 51c8d7e..2170da0 100644 --- a/bfd/elf-s390-common.c +++ b/bfd/elf-s390-common.c @@ -236,11 +236,10 @@ elf_s390_add_symbol_hook (bfd *abfd, asection **secp ATTRIBUTE_UNUSED, bfd_vma *valp ATTRIBUTE_UNUSED) { - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; return TRUE; } diff --git a/bfd/elf-strtab.c b/bfd/elf-strtab.c index ca8ac33..a91a03d 100644 --- a/bfd/elf-strtab.c +++ b/bfd/elf-strtab.c @@ -48,9 +48,9 @@ struct elf_strtab_hash { struct bfd_hash_table table; /* Next available index. */ - bfd_size_type size; + size_t size; /* Number of array entries alloced. */ - bfd_size_type alloced; + size_t alloced; /* Final strtab size. */ bfd_size_type sec_size; /* Array of pointers to strtab entries. */ @@ -112,8 +112,8 @@ _bfd_elf_strtab_init (void) table->size = 1; table->alloced = 64; amt = sizeof (struct elf_strtab_hasn_entry *); - table->array = (struct elf_strtab_hash_entry **) - bfd_malloc (table->alloced * amt); + table->array = ((struct elf_strtab_hash_entry **) + bfd_malloc (table->alloced * amt)); if (table->array == NULL) { free (table); @@ -138,7 +138,7 @@ _bfd_elf_strtab_free (struct elf_strtab_hash *tab) /* Get the index of an entity in a hash table, adding it if it is not already present. */ -bfd_size_type +size_t _bfd_elf_strtab_add (struct elf_strtab_hash *tab, const char *str, bfd_boolean copy) @@ -155,7 +155,7 @@ _bfd_elf_strtab_add (struct elf_strtab_hash *tab, bfd_hash_lookup (&tab->table, str, TRUE, copy); if (entry == NULL) - return (bfd_size_type) -1; + return (size_t) -1; entry->refcount++; if (entry->len == 0) @@ -170,7 +170,7 @@ _bfd_elf_strtab_add (struct elf_strtab_hash *tab, 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; + return (size_t) -1; } entry->u.index = tab->size++; @@ -180,9 +180,9 @@ _bfd_elf_strtab_add (struct elf_strtab_hash *tab, } void -_bfd_elf_strtab_addref (struct elf_strtab_hash *tab, bfd_size_type idx) +_bfd_elf_strtab_addref (struct elf_strtab_hash *tab, size_t idx) { - if (idx == 0 || idx == (bfd_size_type) -1) + if (idx == 0 || idx == (size_t) -1) return; BFD_ASSERT (tab->sec_size == 0); BFD_ASSERT (idx < tab->size); @@ -190,9 +190,9 @@ _bfd_elf_strtab_addref (struct elf_strtab_hash *tab, bfd_size_type idx) } void -_bfd_elf_strtab_delref (struct elf_strtab_hash *tab, bfd_size_type idx) +_bfd_elf_strtab_delref (struct elf_strtab_hash *tab, size_t idx) { - if (idx == 0 || idx == (bfd_size_type) -1) + if (idx == 0 || idx == (size_t) -1) return; BFD_ASSERT (tab->sec_size == 0); BFD_ASSERT (idx < tab->size); @@ -201,7 +201,7 @@ _bfd_elf_strtab_delref (struct elf_strtab_hash *tab, bfd_size_type idx) } unsigned int -_bfd_elf_strtab_refcount (struct elf_strtab_hash *tab, bfd_size_type idx) +_bfd_elf_strtab_refcount (struct elf_strtab_hash *tab, size_t idx) { return tab->array[idx]->refcount; } @@ -209,22 +209,51 @@ _bfd_elf_strtab_refcount (struct elf_strtab_hash *tab, bfd_size_type idx) void _bfd_elf_strtab_clear_all_refs (struct elf_strtab_hash *tab) { - bfd_size_type idx; + size_t idx; for (idx = 1; idx < tab->size; idx++) tab->array[idx]->refcount = 0; } -/* Downsizes strtab. Entries from IDX up to the current size are - removed from the array. */ +/* Save strtab refcounts prior to adding --as-needed library. */ + +struct strtab_save +{ + size_t size; + unsigned int refcount[1]; +}; + +void * +_bfd_elf_strtab_save (struct elf_strtab_hash *tab) +{ + struct strtab_save *save; + size_t idx, size; + + size = sizeof (*save) + (tab->size - 1) * sizeof (save->refcount[0]); + save = bfd_malloc (size); + if (save == NULL) + return save; + + save->size = tab->size; + for (idx = 1; idx < tab->size; idx++) + save->refcount[idx] = tab->array[idx]->refcount; + return save; +} + +/* Restore strtab refcounts on finding --as-needed library not needed. */ + void -_bfd_elf_strtab_restore_size (struct elf_strtab_hash *tab, bfd_size_type idx) +_bfd_elf_strtab_restore (struct elf_strtab_hash *tab, void *buf) { - bfd_size_type curr_size = tab->size; + size_t idx, curr_size = tab->size; + struct strtab_save *save = (struct strtab_save *) buf; BFD_ASSERT (tab->sec_size == 0); - BFD_ASSERT (idx <= curr_size); - tab->size = idx; + BFD_ASSERT (save->size <= curr_size); + tab->size = save->size; + for (idx = 1; idx < save->size; ++idx) + tab->array[idx]->refcount = save->refcount[idx]; + for (; idx < curr_size; ++idx) { /* We don't remove entries from the hash table, just set their @@ -242,7 +271,7 @@ _bfd_elf_strtab_size (struct elf_strtab_hash *tab) } bfd_size_type -_bfd_elf_strtab_offset (struct elf_strtab_hash *tab, bfd_size_type idx) +_bfd_elf_strtab_offset (struct elf_strtab_hash *tab, size_t idx) { struct elf_strtab_hash_entry *entry; @@ -259,7 +288,8 @@ _bfd_elf_strtab_offset (struct elf_strtab_hash *tab, bfd_size_type idx) bfd_boolean _bfd_elf_strtab_emit (register bfd *abfd, struct elf_strtab_hash *tab) { - bfd_size_type off = 1, i; + bfd_size_type off = 1; + size_t i; if (bfd_bwrite ("", 1, abfd) != 1) return FALSE; @@ -329,16 +359,12 @@ void _bfd_elf_strtab_finalize (struct elf_strtab_hash *tab) { struct elf_strtab_hash_entry **array, **a, *e; - bfd_size_type size, amt; - - /* GCC 2.91.66 (egcs-1.1.2) on i386 miscompiles this function when i is - a 64-bit bfd_size_type: a 64-bit target or --enable-64-bit-bfd. - Besides, indexing with a long long wouldn't give anything but extra - cycles. */ - size_t i; + bfd_size_type amt, sec_size; + size_t size, i; /* Sort the strings by suffix and length. */ - amt = tab->size * sizeof (struct elf_strtab_hash_entry *); + amt = tab->size; + amt *= sizeof (struct elf_strtab_hash_entry *); array = (struct elf_strtab_hash_entry **) bfd_malloc (amt); if (array == NULL) goto alloc_failure; @@ -397,18 +423,18 @@ alloc_failure: free (array); /* Assign positions to the strings we want to keep. */ - size = 1; + sec_size = 1; for (i = 1; i < tab->size; ++i) { e = tab->array[i]; if (e->refcount && e->len > 0) { - e->u.index = size; - size += e->len; + e->u.index = sec_size; + sec_size += e->len; } } - tab->sec_size = size; + tab->sec_size = sec_size; /* Adjust the rest. */ for (i = 1; i < tab->size; ++i) diff --git a/bfd/elf.c b/bfd/elf.c index 30112ae..274cd53 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -407,11 +407,17 @@ bfd_elf_get_elf_syms (bfd *ibfd, /* Find an index section that is linked to this symtab section. */ for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next) - if (sections[entry->hdr.sh_link] == symtab_hdr) - { - shndx_hdr = & entry->hdr; - break; - }; + { + /* PR 20063. */ + if (entry->hdr.sh_link >= elf_numsections (ibfd)) + continue; + + if (sections[entry->hdr.sh_link] == symtab_hdr) + { + shndx_hdr = & entry->hdr; + break; + }; + } if (shndx_hdr == NULL) { @@ -429,7 +435,7 @@ bfd_elf_get_elf_syms (bfd *ibfd, alloc_intsym = NULL; bed = get_elf_backend_data (ibfd); extsym_size = bed->s->sizeof_sym; - amt = symcount * extsym_size; + amt = (bfd_size_type) symcount * extsym_size; pos = symtab_hdr->sh_offset + symoffset * extsym_size; if (extsym_buf == NULL) { @@ -448,7 +454,7 @@ bfd_elf_get_elf_syms (bfd *ibfd, extshndx_buf = NULL; else { - amt = symcount * sizeof (Elf_External_Sym_Shndx); + amt = (bfd_size_type) symcount * sizeof (Elf_External_Sym_Shndx); pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx); if (extshndx_buf == NULL) { @@ -970,9 +976,9 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, { flags |= SEC_MERGE; newsect->entsize = hdr->sh_entsize; - if ((hdr->sh_flags & SHF_STRINGS) != 0) - flags |= SEC_STRINGS; } + if ((hdr->sh_flags & SHF_STRINGS) != 0) + flags |= SEC_STRINGS; if (hdr->sh_flags & SHF_GROUP) if (!setup_group (abfd, hdr, newsect)) return FALSE; @@ -1175,7 +1181,8 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, return TRUE; } -const char *const bfd_elf_section_type_names[] = { +const char *const bfd_elf_section_type_names[] = +{ "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB", "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE", "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM", @@ -1212,14 +1219,160 @@ bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, return bfd_reloc_continue; } +/* Returns TRUE if section A matches section B. + Names, addresses and links may be different, but everything else + should be the same. */ + +static bfd_boolean +section_match (const Elf_Internal_Shdr * a, + const Elf_Internal_Shdr * b) +{ + return + a->sh_type == b->sh_type + && (a->sh_flags & ~ SHF_INFO_LINK) + == (b->sh_flags & ~ SHF_INFO_LINK) + && a->sh_addralign == b->sh_addralign + && a->sh_size == b->sh_size + && a->sh_entsize == b->sh_entsize + /* FIXME: Check sh_addr ? */ + ; +} + +/* Find a section in OBFD that has the same characteristics + as IHEADER. Return the index of this section or SHN_UNDEF if + none can be found. Check's section HINT first, as this is likely + to be the correct section. */ + +static unsigned int +find_link (const bfd * obfd, const Elf_Internal_Shdr * iheader, const unsigned int hint) +{ + Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd); + unsigned int i; + + if (section_match (oheaders[hint], iheader)) + return hint; + + for (i = 1; i < elf_numsections (obfd); i++) + { + Elf_Internal_Shdr * oheader = oheaders[i]; + + if (section_match (oheader, iheader)) + /* FIXME: Do we care if there is a potential for + multiple matches ? */ + return i; + } + + return SHN_UNDEF; +} + +/* PR 19938: Attempt to set the ELF section header fields of an OS or + Processor specific section, based upon a matching input section. + Returns TRUE upon success, FALSE otherwise. */ + +static bfd_boolean +copy_special_section_fields (const bfd *ibfd, + bfd *obfd, + const Elf_Internal_Shdr *iheader, + Elf_Internal_Shdr *oheader, + const unsigned int secnum) +{ + const struct elf_backend_data *bed = get_elf_backend_data (obfd); + const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd); + bfd_boolean changed = FALSE; + unsigned int sh_link; + + if (oheader->sh_type == SHT_NOBITS) + { + /* This is a feature for objcopy --only-keep-debug: + When a section's type is changed to NOBITS, we preserve + the sh_link and sh_info fields so that they can be + matched up with the original. + + Note: Strictly speaking these assignments are wrong. + The sh_link and sh_info fields should point to the + relevent sections in the output BFD, which may not be in + the same location as they were in the input BFD. But + the whole point of this action is to preserve the + original values of the sh_link and sh_info fields, so + that they can be matched up with the section headers in + the original file. So strictly speaking we may be + creating an invalid ELF file, but it is only for a file + that just contains debug info and only for sections + without any contents. */ + if (oheader->sh_link == 0) + oheader->sh_link = iheader->sh_link; + if (oheader->sh_info == 0) + oheader->sh_info = iheader->sh_info; + return TRUE; + } + + /* Allow the target a chance to decide how these fields should be set. */ + if (bed->elf_backend_copy_special_section_fields != NULL + && bed->elf_backend_copy_special_section_fields + (ibfd, obfd, iheader, oheader)) + return TRUE; + + /* We have an iheader which might match oheader, and which has non-zero + sh_info and/or sh_link fields. Attempt to follow those links and find + the section in the output bfd which corresponds to the linked section + in the input bfd. */ + if (iheader->sh_link != SHN_UNDEF) + { + sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link); + if (sh_link != SHN_UNDEF) + { + oheader->sh_link = sh_link; + changed = TRUE; + } + else + /* FIXME: Should we install iheader->sh_link + if we could not find a match ? */ + (* _bfd_error_handler) + (_("%B: Failed to find link section for section %d"), obfd, secnum); + } + + if (iheader->sh_info) + { + /* The sh_info field can hold arbitrary information, but if the + SHF_LINK_INFO flag is set then it should be interpreted as a + section index. */ + if (iheader->sh_flags & SHF_INFO_LINK) + { + sh_link = find_link (obfd, iheaders[iheader->sh_info], + iheader->sh_info); + if (sh_link != SHN_UNDEF) + oheader->sh_flags |= SHF_INFO_LINK; + } + else + /* No idea what it means - just copy it. */ + sh_link = iheader->sh_info; + + if (sh_link != SHN_UNDEF) + { + oheader->sh_info = sh_link; + changed = TRUE; + } + else + (* _bfd_error_handler) + (_("%B: Failed to find info section for section %d"), obfd, secnum); + } + + return changed; +} + /* Copy the program header and other data from one object module to another. */ bfd_boolean _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd) { + const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd); + Elf_Internal_Shdr **oheaders = elf_elfsections (obfd); + const struct elf_backend_data *bed; + unsigned int i; + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) + || bfd_get_flavour (obfd) != bfd_target_elf_flavour) return TRUE; if (!elf_flags_init (obfd)) @@ -1234,70 +1387,103 @@ _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd) elf_elfheader (obfd)->e_ident[EI_OSABI] = elf_elfheader (ibfd)->e_ident[EI_OSABI]; + /* If set, copy the EI_ABIVERSION field. */ + if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION]) + elf_elfheader (obfd)->e_ident[EI_ABIVERSION] + = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION]; + /* Copy object attributes. */ _bfd_elf_copy_obj_attributes (ibfd, obfd); - /* This is an feature for objcopy --only-keep-debug: When a section's type - is changed to NOBITS, we preserve the sh_link and sh_info fields so that - they can be matched up with the original. */ - Elf_Internal_Shdr ** iheaders = elf_elfsections (ibfd); - Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd); + if (iheaders == NULL || oheaders == NULL) + return TRUE; + + bed = get_elf_backend_data (obfd); - if (iheaders != NULL && oheaders != NULL) + /* Possibly copy other fields in the section header. */ + for (i = 1; i < elf_numsections (obfd); i++) { - unsigned int i; + unsigned int j; + Elf_Internal_Shdr * oheader = oheaders[i]; + + /* Ignore ordinary sections. SHT_NOBITS sections are considered however + because of a special case need for generating separate debug info + files. See below for more details. */ + if (oheader == NULL + || (oheader->sh_type != SHT_NOBITS + && oheader->sh_type < SHT_LOOS)) + continue; + + /* Ignore empty sections, and sections whose + fields have already been initialised. */ + if (oheader->sh_size == 0 + || (oheader->sh_info != 0 && oheader->sh_link != 0)) + continue; - for (i = 0; i < elf_numsections (obfd); i++) + /* Scan for the matching section in the input bfd. + First we try for a direct mapping between the input and output sections. */ + for (j = 1; j < elf_numsections (ibfd); j++) { - unsigned int j; - Elf_Internal_Shdr * oheader = oheaders[i]; + const Elf_Internal_Shdr * iheader = iheaders[j]; - if (oheader == NULL - || oheader->sh_type != SHT_NOBITS - || oheader->sh_size == 0 - || (oheader->sh_info != 0 && oheader->sh_link != 0)) + if (iheader == NULL) continue; - /* Scan for the matching section in the input bfd. - FIXME: We could use something better than a linear scan here. - Unfortunately we cannot compare names as the output string table - is empty, so instead we check size, address and type. */ - for (j = 0; j < elf_numsections (ibfd); j++) + if (oheader->bfd_section != NULL + && iheader->bfd_section != NULL + && iheader->bfd_section->output_section != NULL + && iheader->bfd_section->output_section == oheader->bfd_section) { - Elf_Internal_Shdr * iheader = iheaders[j]; - - /* Since --only-keep-debug turns all non-debug sections - into SHT_NOBITS sections, the output SHT_NOBITS type - matches any input type. */ - if ((oheader->sh_type == SHT_NOBITS - || iheader->sh_type == oheader->sh_type) - && iheader->sh_flags == oheader->sh_flags - && iheader->sh_addralign == oheader->sh_addralign - && iheader->sh_entsize == oheader->sh_entsize - && iheader->sh_size == oheader->sh_size - && iheader->sh_addr == oheader->sh_addr - && (iheader->sh_info != oheader->sh_info - || iheader->sh_link != oheader->sh_link)) - { - /* Note: Strictly speaking these assignments are wrong. - The sh_link and sh_info fields should point to the - relevent sections in the output BFD, which may not be in - the same location as they were in the input BFD. But the - whole point of this action is to preserve the original - values of the sh_link and sh_info fields, so that they - can be matched up with the section headers in the - original file. So strictly speaking we may be creating - an invalid ELF file, but it is only for a file that just - contains debug info and only for sections without any - contents. */ - if (oheader->sh_link == 0) - oheader->sh_link = iheader->sh_link; - if (oheader->sh_info == 0) - oheader->sh_info = iheader->sh_info; - break; - } + /* We have found a connection from the input section to the + output section. Attempt to copy the header fields. If + this fails then do not try any further sections - there + should only be a one-to-one mapping between input and output. */ + if (! copy_special_section_fields (ibfd, obfd, iheader, oheader, i)) + j = elf_numsections (ibfd); + break; } } + + if (j < elf_numsections (ibfd)) + continue; + + /* That failed. So try to deduce the corresponding input section. + Unfortunately we cannot compare names as the output string table + is empty, so instead we check size, address and type. */ + for (j = 1; j < elf_numsections (ibfd); j++) + { + const Elf_Internal_Shdr * iheader = iheaders[j]; + + if (iheader == NULL) + continue; + + /* Try matching fields in the input section's header. + Since --only-keep-debug turns all non-debug sections into + SHT_NOBITS sections, the output SHT_NOBITS type matches any + input type. */ + if ((oheader->sh_type == SHT_NOBITS + || iheader->sh_type == oheader->sh_type) + && (iheader->sh_flags & ~ SHF_INFO_LINK) + == (oheader->sh_flags & ~ SHF_INFO_LINK) + && iheader->sh_addralign == oheader->sh_addralign + && iheader->sh_entsize == oheader->sh_entsize + && iheader->sh_size == oheader->sh_size + && iheader->sh_addr == oheader->sh_addr + && (iheader->sh_info != oheader->sh_info + || iheader->sh_link != oheader->sh_link)) + { + if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i)) + break; + } + } + + if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS) + { + /* Final attempt. Call the backend copy function + with a NULL input section. */ + if (bed->elf_backend_copy_special_section_fields != NULL) + bed->elf_backend_copy_special_section_fields (ibfd, obfd, NULL, oheader); + } } return TRUE; @@ -2041,7 +2227,6 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) Elf_Internal_Shdr *hdr2, **p_hdr; unsigned int num_sec = elf_numsections (abfd); struct bfd_elf_section_data *esdt; - bfd_size_type amt; if (hdr->sh_entsize != (bfd_size_type) (hdr->sh_type == SHT_REL @@ -2134,8 +2319,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) /* PR 17512: file: 0b4f81b7. */ if (*p_hdr != NULL) goto fail; - amt = sizeof (*hdr2); - hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt); + hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2)); if (hdr2 == NULL) goto fail; *hdr2 = *hdr; @@ -2835,11 +3019,9 @@ _bfd_elf_init_reloc_shdr (bfd *abfd, { Elf_Internal_Shdr *rel_hdr; const struct elf_backend_data *bed = get_elf_backend_data (abfd); - bfd_size_type amt; - amt = sizeof (Elf_Internal_Shdr); BFD_ASSERT (reldata->hdr == NULL); - rel_hdr = bfd_zalloc (abfd, amt); + rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr)); reldata->hdr = rel_hdr; if (delay_st_name_p) @@ -3022,14 +3204,17 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) break; case SHT_STRTAB: - case SHT_INIT_ARRAY: - case SHT_FINI_ARRAY: - case SHT_PREINIT_ARRAY: case SHT_NOTE: case SHT_NOBITS: case SHT_PROGBITS: break; + case SHT_INIT_ARRAY: + case SHT_FINI_ARRAY: + case SHT_PREINIT_ARRAY: + this_hdr->sh_entsize = bed->s->arch_size / 8; + break; + case SHT_HASH: this_hdr->sh_entsize = bed->s->sizeof_hash_entry; break; @@ -3099,9 +3284,9 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) { this_hdr->sh_flags |= SHF_MERGE; this_hdr->sh_entsize = asect->entsize; - if ((asect->flags & SEC_STRINGS) != 0) - this_hdr->sh_flags |= SHF_STRINGS; } + if ((asect->flags & SEC_STRINGS) != 0) + this_hdr->sh_flags |= SHF_STRINGS; if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL) this_hdr->sh_flags |= SHF_GROUP; if ((asect->flags & SEC_THREAD_LOCAL) != 0) @@ -3355,7 +3540,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) /* SHT_GROUP sections are in relocatable files only. */ if (link_info == NULL || bfd_link_relocatable (link_info)) { - bfd_size_type reloc_count = 0; + size_t reloc_count = 0; /* Put SHT_GROUP sections first. */ for (sec = abfd->sections; sec != NULL; sec = sec->next) @@ -3685,6 +3870,44 @@ sym_is_global (bfd *abfd, asymbol *sym) || bfd_is_com_section (bfd_get_section (sym))); } +/* Filter global symbols of ABFD to include in the import library. All + SYMCOUNT symbols of ABFD can be examined from their pointers in + SYMS. Pointers of symbols to keep should be stored contiguously at + the beginning of that array. + + Returns the number of symbols to keep. */ + +unsigned int +_bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info, + asymbol **syms, long symcount) +{ + long src_count, dst_count = 0; + + for (src_count = 0; src_count < symcount; src_count++) + { + asymbol *sym = syms[src_count]; + char *name = (char *) bfd_asymbol_name (sym); + struct bfd_link_hash_entry *h; + + if (!sym_is_global (abfd, sym)) + continue; + + h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, FALSE); + if (h == NULL) + continue; + if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak) + continue; + if (h->linker_def || h->ldscript_def) + continue; + + syms[dst_count++] = sym; + } + + syms[dst_count] = NULL; + + return dst_count; +} + /* Don't output section symbols for sections that are not going to be output, that are duplicates or there is no BFD section. */ @@ -3919,7 +4142,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd, shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr; /* sh_name was set in prep_headers. */ shstrtab_hdr->sh_type = SHT_STRTAB; - shstrtab_hdr->sh_flags = 0; + shstrtab_hdr->sh_flags = bed->elf_strtab_flags; shstrtab_hdr->sh_addr = 0; /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load. */ shstrtab_hdr->sh_entsize = 0; @@ -5049,7 +5272,9 @@ assign_file_positions_for_load_sections (bfd *abfd, p->p_memsz = bed->s->sizeof_ehdr; if (m->count > 0) { - if (p->p_vaddr < (bfd_vma) off) + if (p->p_vaddr < (bfd_vma) off + || (!m->p_paddr_valid + && p->p_paddr < (bfd_vma) off)) { (*_bfd_error_handler) (_("%B: Not enough room for program headers, try linking with -N"), @@ -7419,7 +7644,9 @@ error_return: section of a symbol to be a section that is actually in the output file. */ sec2 = bfd_get_section_by_name (abfd, sec->name); - if (sec2 == NULL) + if (sec2 != NULL) + shndx = _bfd_elf_section_from_bfd_section (abfd, sec2); + if (shndx == SHN_BAD) { _bfd_error_handler (_("\ Unable to find equivalent output section for symbol '%s' from section '%s'"), @@ -7428,9 +7655,6 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"), bfd_set_error (bfd_error_invalid_operation); goto error_return; } - - shndx = _bfd_elf_section_from_bfd_section (abfd, sec2); - BFD_ASSERT (shndx != SHN_BAD); } } @@ -7470,12 +7694,16 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"), } else if (bfd_is_com_section (syms[idx]->section)) { -#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); + if (type != STT_TLS) + { + if ((abfd->flags & BFD_CONVERT_ELF_COMMON)) + type = ((abfd->flags & BFD_USE_ELF_STT_COMMON) + ? STT_COMMON : STT_OBJECT); + else + type = ((flags & BSF_ELF_COMMON) != 0 + ? STT_COMMON : STT_OBJECT); + } + 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) @@ -7547,8 +7775,7 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"), *sttp = stt; symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt); symstrtab_hdr->sh_type = SHT_STRTAB; - - symstrtab_hdr->sh_flags = 0; + symstrtab_hdr->sh_flags = bed->elf_strtab_flags; symstrtab_hdr->sh_addr = 0; symstrtab_hdr->sh_entsize = 0; symstrtab_hdr->sh_link = 0; @@ -9139,9 +9366,6 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) if (note->namesz == 6 && strcmp (note->namedata, "LINUX") == 0) return elfcore_grok_xstatereg (abfd, note); - else if (note->namesz == 8 - && strcmp (note->namedata, "FreeBSD") == 0) - return elfcore_grok_xstatereg (abfd, note); else return TRUE; @@ -9297,12 +9521,6 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo", note); - case NT_FREEBSD_THRMISC: - if (note->namesz == 8 - && strcmp (note->namedata, "FreeBSD") == 0) - return elfcore_make_note_pseudosection (abfd, ".thrmisc", note); - else - return TRUE; } } @@ -9368,6 +9586,168 @@ elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note) } static bfd_boolean +elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note) +{ + size_t offset; + + switch (abfd->arch_info->bits_per_word) + { + case 32: + if (note->descsz < 108) + return FALSE; + break; + + case 64: + if (note->descsz < 120) + return FALSE; + break; + + default: + return FALSE; + } + + /* Check for version 1 in pr_version. */ + if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1) + return FALSE; + offset = 4; + + /* Skip over pr_psinfosz. */ + if (abfd->arch_info->bits_per_word == 32) + offset += 4; + else + { + offset += 4; /* Padding before pr_psinfosz. */ + offset += 8; + } + + /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */ + elf_tdata (abfd)->core->program + = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17); + offset += 17; + + /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */ + elf_tdata (abfd)->core->command + = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81); + offset += 81; + + /* Padding before pr_pid. */ + offset += 2; + + /* The pr_pid field was added in version "1a". */ + if (note->descsz < offset + 4) + return TRUE; + + elf_tdata (abfd)->core->pid + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + + return TRUE; +} + +static bfd_boolean +elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note) +{ + size_t offset; + size_t size; + + /* Check for version 1 in pr_version. */ + if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1) + return FALSE; + offset = 4; + + /* Skip over pr_statussz. */ + switch (abfd->arch_info->bits_per_word) + { + case 32: + offset += 4; + break; + + case 64: + offset += 4; /* Padding before pr_statussz. */ + offset += 8; + break; + + default: + return FALSE; + } + + /* Extract size of pr_reg from pr_gregsetsz. */ + if (abfd->arch_info->bits_per_word == 32) + size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + else + size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset); + + /* Skip over pr_gregsetsz and pr_fpregsetsz. */ + offset += (abfd->arch_info->bits_per_word / 8) * 2; + + /* Skip over pr_osreldate. */ + offset += 4; + + /* Read signal from pr_cursig. */ + if (elf_tdata (abfd)->core->signal == 0) + elf_tdata (abfd)->core->signal + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4; + + /* Read TID from pr_pid. */ + elf_tdata (abfd)->core->lwpid + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4; + + /* Padding before pr_reg. */ + if (abfd->arch_info->bits_per_word == 64) + offset += 4; + + /* Make a ".reg/999" section and a ".reg" section. */ + return _bfd_elfcore_make_pseudosection (abfd, ".reg", + size, note->descpos + offset); +} + +static bfd_boolean +elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note) +{ + switch (note->type) + { + case NT_PRSTATUS: + return elfcore_grok_freebsd_prstatus (abfd, note); + + case NT_FPREGSET: + return elfcore_grok_prfpreg (abfd, note); + + case NT_PRPSINFO: + return elfcore_grok_freebsd_psinfo (abfd, note); + + case NT_FREEBSD_THRMISC: + if (note->namesz == 8) + return elfcore_make_note_pseudosection (abfd, ".thrmisc", note); + else + return TRUE; + + case NT_FREEBSD_PROCSTAT_AUXV: + { + asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv", + SEC_HAS_CONTENTS); + + if (sect == NULL) + return FALSE; + sect->size = note->descsz - 4; + sect->filepos = note->descpos + 4; + sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32; + + return TRUE; + } + + case NT_X86_XSTATE: + if (note->namesz == 8) + return elfcore_grok_xstatereg (abfd, note); + else + return TRUE; + + default: + return TRUE; + } +} + +static bfd_boolean elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp) { char *cp; @@ -10279,6 +10659,7 @@ elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset) grokers[] = { GROKER_ELEMENT ("", elfcore_grok_note), + GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note), GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note), GROKER_ELEMENT ( "OpenBSD", elfcore_grok_openbsd_note), GROKER_ELEMENT ("QNX", elfcore_grok_nto_note), @@ -10460,6 +10841,12 @@ _bfd_elf_rel_local_sym (bfd *abfd, sym->st_value + addend); } +/* Adjust an address within a section. Given OFFSET within SEC, return + the new offset within the section, based upon changes made to the + section. Returns -1 if the offset is now invalid. + The offset (in abnd out) is in target sized bytes, however big a + byte may be. */ + bfd_vma _bfd_elf_section_offset (bfd *abfd, struct bfd_link_info *info, @@ -10473,12 +10860,17 @@ _bfd_elf_section_offset (bfd *abfd, offset); case SEC_INFO_TYPE_EH_FRAME: return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset); + default: if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0) { + /* Reverse the offset. */ const struct elf_backend_data *bed = get_elf_backend_data (abfd); bfd_size_type address_size = bed->s->arch_size / 8; - offset = sec->size - offset - address_size; + + /* address_size and sec->size are in octets. Convert + to bytes before subtracting the original offset. */ + offset = (sec->size - address_size) / bfd_octets_per_byte (abfd) - offset; } return offset; } diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c index 8ffc23a..00828be 100644 --- a/bfd/elf32-arc.c +++ b/bfd/elf32-arc.c @@ -26,28 +26,22 @@ #include "elf/arc.h" #include "libiberty.h" #include "opcode/arc-func.h" +#include "opcode/arc.h" #include "arc-plt.h" -#ifdef DEBUG -# define PR_DEBUG(fmt, args...) fprintf (stderr, fmt, ##args) -#else -# define PR_DEBUG(fmt, args...) -#endif - -/* #define ARC_ENABLE_DEBUG 1 */ -#ifndef ARC_ENABLE_DEBUG -#define ARC_DEBUG(...) -#else -static char * +/* #define ARC_ENABLE_DEBUG 1 */ +#ifdef ARC_ENABLE_DEBUG +static const char * name_for_global_symbol (struct elf_link_hash_entry *h) { static char *local_str = "(local)"; if (h == NULL) return local_str; - else - return h->root.root.string; + return h->root.root.string; } -#define ARC_DEBUG(args...) fprintf (stderr, ##args) +#define ARC_DEBUG(fmt, args...) fprintf (stderr, fmt, ##args) +#else +#define ARC_DEBUG(...) #endif @@ -57,6 +51,7 @@ name_for_global_symbol (struct elf_link_hash_entry *h) Elf_Internal_Rela _rel; \ bfd_byte * _loc; \ \ + BFD_ASSERT (_htab->srel##SECTION &&_htab->srel##SECTION->contents); \ _loc = _htab->srel##SECTION->contents \ + ((_htab->srel##SECTION->reloc_count) \ * sizeof (Elf32_External_Rela)); \ @@ -64,24 +59,11 @@ name_for_global_symbol (struct elf_link_hash_entry *h) _rel.r_addend = ADDEND; \ _rel.r_offset = (_htab->s##SECTION)->output_section->vma \ + (_htab->s##SECTION)->output_offset + OFFSET; \ + BFD_ASSERT ((long) SYM_IDX != -1); \ _rel.r_info = ELF32_R_INFO (SYM_IDX, TYPE); \ bfd_elf32_swap_reloca_out (BFD, &_rel, _loc); \ } -struct arc_local_data -{ - bfd_vma sdata_begin_symbol_vma; - asection * sdata_output_section; - bfd_vma got_symbol_vma; -}; - -struct arc_local_data global_arc_data = -{ - .sdata_begin_symbol_vma = 0, - .sdata_output_section = NULL, - .got_symbol_vma = 0, -}; - struct dynamic_sections { bfd_boolean initialized; @@ -115,75 +97,6 @@ const char * dyn_section_names[DYN_SECTION_TYPES_END] = ".rela.plt" }; -enum tls_type_e -{ - GOT_UNKNOWN = 0, - GOT_NORMAL, - GOT_TLS_GD, - GOT_TLS_IE, - GOT_TLS_LE -}; - -enum tls_got_entries -{ - NONE = 0, - MOD, - OFF, - MOD_AND_OFF -}; - -struct got_entry -{ - struct got_entry *next; - enum tls_type_e type; - bfd_vma offset; - bfd_boolean processed; - bfd_boolean created_dyn_relocation; - enum tls_got_entries existing_entries; -}; - -static void -new_got_entry_to_list (struct got_entry **list, - enum tls_type_e type, - bfd_vma offset, - enum tls_got_entries existing_entries) -{ - /* Find list end. Avoid having multiple entries of the same - type. */ - struct got_entry **p = list; - while (*p != NULL) - { - if ((*p)->type == type) - return; - p = &((*p)->next); - } - - struct got_entry *entry = - (struct got_entry *) malloc (sizeof(struct got_entry)); - - entry->type = type; - entry->offset = offset; - entry->next = NULL; - entry->processed = FALSE; - entry->created_dyn_relocation = FALSE; - entry->existing_entries = existing_entries; - - /* Add the entry to the end of the list. */ - *p = entry; -} - -static bfd_boolean -symbol_has_entry_of_type (struct got_entry *list, enum tls_type_e type) -{ - while (list != NULL) - { - if (list->type == type) - return TRUE; - list = list->next; - } - - return FALSE; -} /* The default symbols representing the init and fini dyn values. TODO: Check what is the relation of those strings with arclinux.em @@ -250,34 +163,39 @@ is_reloc_for_TLS (reloc_howto_type *howto) return (strstr (howto->name, "TLS") != NULL) ? TRUE : FALSE; } -#define arc_bfd_get_8(A,B,C) bfd_get_8(A,B) -#define arc_bfd_get_16(A,B,C) bfd_get_16(A,B) -#define arc_bfd_put_8(A,B,C,D) bfd_put_8(A,B,C) -#define arc_bfd_put_16(A,B,C,D) bfd_put_16(A,B,C) - -static long -arc_bfd_get_32 (bfd * abfd, void *loc, asection * input_section) +struct arc_relocation_data { - long insn = bfd_get_32 (abfd, loc); + bfd_signed_vma reloc_offset; + bfd_signed_vma reloc_addend; + bfd_signed_vma got_offset_value; - if (!bfd_big_endian (abfd) - && input_section - && (input_section->flags & SEC_CODE)) - insn = ((0x0000fffff & insn) << 16) | ((0xffff0000 & insn) >> 16); + bfd_signed_vma sym_value; + asection * sym_section; - return insn; -} + reloc_howto_type *howto; -static void -arc_bfd_put_32 (bfd * abfd, long insn, void *loc, asection * input_section) -{ - if (!bfd_big_endian (abfd) - && input_section - && (input_section->flags & SEC_CODE)) - insn = ((0x0000fffff & insn) << 16) | ((0xffff0000 & insn) >> 16); + asection * input_section; + + bfd_signed_vma sdata_begin_symbol_vma; + bfd_boolean sdata_begin_symbol_vma_set; + bfd_signed_vma got_symbol_vma; + + bfd_boolean should_relocate; + + const char * symbol_name; +}; + +/* Should be included at this location due to static declarations + * defined before this point. */ +#include "arc-got.h" + +#define arc_bfd_get_8(A,B,C) bfd_get_8(A,B) +#define arc_bfd_get_16(A,B,C) bfd_get_16(A,B) +#define arc_bfd_get_32(A,B,C) bfd_get_32(A,B) +#define arc_bfd_put_8(A,B,C,D) bfd_put_8(A,B,C) +#define arc_bfd_put_16(A,B,C,D) bfd_put_16(A,B,C) +#define arc_bfd_put_32(A,B,C,D) bfd_put_32(A,B,C) - bfd_put_32 (abfd, insn, loc); -} static bfd_reloc_status_type arc_elf_reloc (bfd *abfd ATTRIBUTE_UNUSED, @@ -315,7 +233,9 @@ enum howto_list #undef ARC_RELOC_HOWTO #define ARC_RELOC_HOWTO(TYPE, VALUE, RSIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ - [TYPE] = HOWTO (R_##TYPE, 0, RSIZE, BITSIZE, FALSE, 0, complain_overflow_##OVERFLOW, arc_elf_reloc, "R_" #TYPE, FALSE, 0, 0, FALSE), + [TYPE] = HOWTO (R_##TYPE, 0, RSIZE, BITSIZE, FALSE, 0, \ + complain_overflow_##OVERFLOW, arc_elf_reloc, \ + "R_" #TYPE, FALSE, 0, 0, FALSE), static struct reloc_howto_struct elf_arc_howto_table[] = { @@ -344,9 +264,15 @@ static void arc_elf_howto_init (void) #define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ elf_arc_howto_table[TYPE].pc_relative = \ (strstr (#FORMULA, " P ") != NULL || strstr (#FORMULA, " PDATA ") != NULL); \ - elf_arc_howto_table[TYPE].dst_mask = RELOC_FUNCTION(0, ~0); + elf_arc_howto_table[TYPE].dst_mask = RELOC_FUNCTION(0, ~0); \ + /* Only 32 bit data relocations should be marked as ME. */ \ + if (strstr (#FORMULA, " ME ") != NULL) \ + { \ + BFD_ASSERT (SIZE == 2); \ + } #include "elf/arc-reloc.def" + } #undef ARC_RELOC_HOWTO @@ -372,7 +298,7 @@ arc_elf_howto (unsigned int r_type) struct arc_reloc_map { bfd_reloc_code_real_type bfd_reloc_val; - unsigned char elf_reloc_val; + unsigned char elf_reloc_val; }; #define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ @@ -389,6 +315,29 @@ static const struct arc_reloc_map arc_reloc_map[] = }; #undef ARC_RELOC_HOWTO +typedef ATTRIBUTE_UNUSED bfd_vma (*replace_func) (unsigned, int ATTRIBUTE_UNUSED); + +#define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ + case TYPE: \ + func = (void *) RELOC_FUNCTION; \ + break; +static replace_func +get_replace_function (bfd *abfd, unsigned int r_type) +{ + void *func = NULL; + + switch (r_type) + { + #include "elf/arc-reloc.def" + } + + if (func == replace_bits24 && bfd_big_endian (abfd)) + return (replace_func) replace_bits24_be; + + return (replace_func) func; +} +#undef ARC_RELOC_HOWTO + static reloc_howto_type * arc_elf32_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) @@ -430,7 +379,6 @@ arc_elf_print_private_bfd_data (bfd *abfd, void * ptr) switch (flags & EF_ARC_MACH_MSK) { - case EF_ARC_CPU_GENERIC : fprintf (file, " -mcpu=generic"); break; case EF_ARC_CPU_ARCV2HS : fprintf (file, " -mcpu=ARCv2HS"); break; case EF_ARC_CPU_ARCV2EM : fprintf (file, " -mcpu=ARCv2EM"); break; case E_ARC_MACH_ARC600 : fprintf (file, " -mcpu=ARC600"); break; @@ -631,8 +579,8 @@ arc_elf_object_p (bfd * abfd) mach = bfd_mach_arc_arcv2; break; default: - mach = (e_machine == EM_ARC_COMPACT) ? - bfd_mach_arc_arc700 : bfd_mach_arc_arcv2; + mach = (e_machine == EM_ARC_COMPACT) + ? bfd_mach_arc_arc700 : bfd_mach_arc_arcv2; break; } } @@ -662,132 +610,161 @@ static void arc_elf_final_write_processing (bfd * abfd, bfd_boolean linker ATTRIBUTE_UNUSED) { - unsigned long val; unsigned long emf; switch (bfd_get_mach (abfd)) { case bfd_mach_arc_arc600: - val = E_ARC_MACH_ARC600; emf = EM_ARC_COMPACT; break; case bfd_mach_arc_arc601: - val = E_ARC_MACH_ARC601; emf = EM_ARC_COMPACT; break; case bfd_mach_arc_arc700: - val = E_ARC_MACH_ARC700; emf = EM_ARC_COMPACT; break; case bfd_mach_arc_arcv2: - val = EF_ARC_CPU_GENERIC; emf = EM_ARC_COMPACT2; - /* TODO: Check validity of this. It can also be ARCV2EM here. - Previous version sets the e_machine here. */ break; default: - abort (); + goto DO_NOTHING; } - elf_elfheader (abfd)->e_flags &= ~EF_ARC_MACH; - elf_elfheader (abfd)->e_flags |= val; elf_elfheader (abfd)->e_machine = emf; + /* Record whatever is the current syscall ABI version. */ elf_elfheader (abfd)->e_flags |= E_ARC_OSABI_CURRENT; -} -#define BFD_DEBUG_PIC(...) - -struct arc_relocation_data -{ - bfd_vma reloc_offset; - bfd_vma reloc_addend; - bfd_vma got_offset_value; - - bfd_vma sym_value; - asection * sym_section; - - reloc_howto_type *howto; - - asection * input_section; - - bfd_vma sdata_begin_symbol_vma; - bfd_boolean sdata_begin_symbol_vma_set; - bfd_vma got_symbol_vma; +DO_NOTHING: + return; +} - bfd_boolean should_relocate; -}; +#ifdef ARC_ENABLE_DEBUG +#define DEBUG_ARC_RELOC(A) debug_arc_reloc (A) static void debug_arc_reloc (struct arc_relocation_data reloc_data) { - PR_DEBUG ("Reloc type=%s, should_relocate = %s\n", - reloc_data.howto->name, - reloc_data.should_relocate ? "true" : "false"); - PR_DEBUG (" offset = 0x%x, addend = 0x%x\n", - (unsigned int) reloc_data.reloc_offset, - (unsigned int) reloc_data.reloc_addend); - PR_DEBUG (" Symbol:\n"); - PR_DEBUG (" value = 0x%08x\n", - (unsigned int) reloc_data.sym_value); + ARC_DEBUG ("Reloc type=%s, should_relocate = %s\n", + reloc_data.howto->name, + reloc_data.should_relocate ? "true" : "false"); + ARC_DEBUG (" offset = 0x%x, addend = 0x%x\n", + (unsigned int) reloc_data.reloc_offset, + (unsigned int) reloc_data.reloc_addend); + ARC_DEBUG (" Symbol:\n"); + ARC_DEBUG (" value = 0x%08x\n", + (unsigned int) reloc_data.sym_value); if (reloc_data.sym_section != NULL) { - PR_DEBUG ("IN IF\n"); - PR_DEBUG ( - " section name = %s, output_offset 0x%08x", - reloc_data.sym_section->name, - (unsigned int) reloc_data.sym_section->output_offset); + ARC_DEBUG (" Symbol Section:\n"); + ARC_DEBUG (" section name = %s, output_offset 0x%08x", + reloc_data.sym_section->name, + (unsigned int) reloc_data.sym_section->output_offset); if (reloc_data.sym_section->output_section != NULL) - { - PR_DEBUG ( - ", output_section->vma = 0x%08x", + ARC_DEBUG (", output_section->vma = 0x%08x", ((unsigned int) reloc_data.sym_section->output_section->vma)); - } - - PR_DEBUG ( "\n"); + ARC_DEBUG ("\n"); + if (reloc_data.sym_section->owner && reloc_data.sym_section->owner->filename) + ARC_DEBUG (" file: %s\n", reloc_data.sym_section->owner->filename); } else { - PR_DEBUG ( " symbol section is NULL\n"); + ARC_DEBUG (" symbol section is NULL\n"); } - PR_DEBUG ( " Input_section:\n"); + ARC_DEBUG (" Input_section:\n"); if (reloc_data.input_section != NULL) { - PR_DEBUG ( - " section name = %s, output_offset 0x%08x, output_section->vma = 0x%08x\n", - reloc_data.input_section->name, - (unsigned int) reloc_data.input_section->output_offset, - (unsigned int) reloc_data.input_section->output_section->vma); - PR_DEBUG ( " changed_address = 0x%08x\n", - (unsigned int) (reloc_data.input_section->output_section->vma + - reloc_data.input_section->output_offset + - reloc_data.reloc_offset)); + ARC_DEBUG (" section name = %s, output_offset 0x%08x, output_section->vma = 0x%08x\n", + reloc_data.input_section->name, + (unsigned int) reloc_data.input_section->output_offset, + (unsigned int) reloc_data.input_section->output_section->vma); + ARC_DEBUG (" changed_address = 0x%08x\n", + (unsigned int) (reloc_data.input_section->output_section->vma + + reloc_data.input_section->output_offset + + reloc_data.reloc_offset)); + ARC_DEBUG (" file: %s\n", reloc_data.input_section->owner->filename); } else { - PR_DEBUG ( " input section is NULL\n"); + ARC_DEBUG (" input section is NULL\n"); } } +#else +#define DEBUG_ARC_RELOC(A) +#endif /* ARC_ENABLE_DEBUG */ -static ATTRIBUTE_UNUSED bfd_vma -get_middle_endian_relocation (bfd_vma reloc) +static bfd_vma +middle_endian_convert (bfd_vma insn, bfd_boolean do_it) { - bfd_vma ret = ((reloc & 0xffff0000) >> 16) | - ((reloc & 0xffff) << 16); - return ret; + if (do_it) + { + insn + = ((insn & 0xffff0000) >> 16) + | ((insn & 0xffff) << 16); + } + return insn; +} + +/* This function is called for relocations that are otherwise marked as NOT + requiring overflow checks. In here we perform non-standard checks of + the relocation value. */ + +static inline bfd_reloc_status_type +arc_special_overflow_checks (const struct arc_relocation_data reloc_data, + bfd_signed_vma relocation, + struct bfd_link_info *info ATTRIBUTE_UNUSED) +{ + switch (reloc_data.howto->type) + { + case R_ARC_NPS_CMEM16: + if (((relocation >> 16) & 0xffff) != NPS_CMEM_HIGH_VALUE) + { + if (reloc_data.reloc_addend == 0) + (*_bfd_error_handler) + (_("%B(%A+0x%lx): CMEM relocation to `%s' is invalid, " + "16 MSB should be 0x%04x (value is 0x%lx)"), + reloc_data.input_section->owner, + reloc_data.input_section, + reloc_data.reloc_offset, + reloc_data.symbol_name, + NPS_CMEM_HIGH_VALUE, + (relocation)); + else + (*_bfd_error_handler) + (_("%B(%A+0x%lx): CMEM relocation to `%s+0x%lx' is invalid, " + "16 MSB should be 0x%04x (value is 0x%lx)"), + reloc_data.input_section->owner, + reloc_data.input_section, + reloc_data.reloc_offset, + reloc_data.symbol_name, + reloc_data.reloc_addend, + NPS_CMEM_HIGH_VALUE, + (relocation)); + return bfd_reloc_overflow; + } + break; + + default: + break; + } + + return bfd_reloc_ok; } -#define S (reloc_data.sym_value \ +#define ME(reloc) (reloc) + +#define IS_ME(FORMULA,BFD) ((strstr (FORMULA, "ME") != NULL) \ + && (!bfd_big_endian (BFD))) + +#define S ((bfd_signed_vma) (reloc_data.sym_value \ + (reloc_data.sym_section->output_section != NULL ? \ (reloc_data.sym_section->output_offset \ - + reloc_data.sym_section->output_section->vma) : 0) \ - ) -#define L (reloc_data.sym_value \ + + reloc_data.sym_section->output_section->vma) : 0))) +#define L ((bfd_signed_vma) (reloc_data.sym_value \ + (reloc_data.sym_section->output_section != NULL ? \ (reloc_data.sym_section->output_offset \ - + reloc_data.sym_section->output_section->vma) : 0) \ - ) + + reloc_data.sym_section->output_section->vma) : 0))) #define A (reloc_data.reloc_addend) #define B (0) #define G (reloc_data.got_offset_value) @@ -797,101 +774,102 @@ get_middle_endian_relocation (bfd_vma reloc) #define MES (0) /* P: relative offset to PCL The offset should be to the current location aligned to 32 bits. */ -#define P ( \ +#define P ((bfd_signed_vma) ( \ ( \ (reloc_data.input_section->output_section != NULL ? \ reloc_data.input_section->output_section->vma : 0) \ + reloc_data.input_section->output_offset \ - + (reloc_data.reloc_offset - (bitsize >= 32 ? 4 : 0)) \ - ) & ~0x3) -#define PDATA ( \ + + (reloc_data.reloc_offset - (bitsize >= 32 ? 4 : 0))) \ + & ~0x3)) +#define PDATA ((bfd_signed_vma) ( \ (reloc_data.input_section->output_section->vma \ + reloc_data.input_section->output_offset \ - + (reloc_data.reloc_offset) \ - )) -#define SECTSTAR (reloc_data.input_section->output_offset) -#define SECTSTART (reloc_data.input_section->output_offset) -#define _SDA_BASE_ (reloc_data.sdata_begin_symbol_vma) -#define TLS_REL ((elf_hash_table (info))->tls_sec->output_section->vma) -#define _SDA_BASE_ (reloc_data.sdata_begin_symbol_vma) + + (reloc_data.reloc_offset)))) +#define SECTSTART (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \ + + reloc_data.sym_section->output_offset) + +#define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma) +#define TLS_REL (bfd_signed_vma) \ + ((elf_hash_table (info))->tls_sec->output_section->vma) #define TLS_TBSS (8) #define TCB_SIZE (8) -#define NON_ME(VALUE) (reverse_me (reloc_data, VALUE)) - #define none (0) -#define PRINT_DEBUG_RELOC_INFO_BEFORE(FORMULA) \ - {\ - asection *sym_section = reloc_data.sym_section; \ - asection *input_section = reloc_data.input_section; \ - ARC_DEBUG ("FORMULA = " #FORMULA "\n"); \ - ARC_DEBUG ("S = 0x%x\n", S); \ - ARC_DEBUG ("A = 0x%x\n", A); \ - ARC_DEBUG ("L = 0x%x\n", L); \ - if (sym_section->output_section != NULL) \ - { \ - ARC_DEBUG ("symbol_section->vma = 0x%x\n", \ - sym_section->output_section->vma + sym_section->output_offset); \ - } \ - else \ - { \ - ARC_DEBUG ("symbol_section->vma = NULL\n"); \ - } \ - if (input_section->output_section != NULL) \ - { \ - ARC_DEBUG ("symbol_section->vma = 0x%x\n", \ - input_section->output_section->vma + input_section->output_offset); \ - } \ - else \ - { \ - ARC_DEBUG ("symbol_section->vma = NULL\n"); \ - } \ - ARC_DEBUG ("PCL = 0x%x\n", P); \ - ARC_DEBUG ("P = 0x%x\n", P); \ - ARC_DEBUG ("G = 0x%x\n", G); \ - ARC_DEBUG ("SDA_OFFSET = 0x%x\n", _SDA_BASE_); \ +#ifdef ARC_ENABLE_DEBUG +#define PRINT_DEBUG_RELOC_INFO_BEFORE(FORMULA, TYPE) \ + do \ + { \ + asection *sym_section = reloc_data.sym_section; \ + asection *input_section = reloc_data.input_section; \ + ARC_DEBUG ("RELOC_TYPE = " TYPE "\n"); \ + ARC_DEBUG ("FORMULA = " FORMULA "\n"); \ + ARC_DEBUG ("S = %#lx\n", S); \ + ARC_DEBUG ("A = %#lx\n", A); \ + ARC_DEBUG ("L = %lx\n", L); \ + if (sym_section->output_section != NULL) \ + ARC_DEBUG ("symbol_section->vma = %#lx\n", \ + sym_section->output_section->vma \ + + sym_section->output_offset); \ + else \ + ARC_DEBUG ("symbol_section->vma = NULL\n"); \ + if (input_section->output_section != NULL) \ + ARC_DEBUG ("symbol_section->vma = %#lx\n", \ + input_section->output_section->vma \ + + input_section->output_offset); \ + else \ + ARC_DEBUG ("symbol_section->vma = NULL\n"); \ + ARC_DEBUG ("PCL = %#lx\n", P); \ + ARC_DEBUG ("P = %#lx\n", P); \ + ARC_DEBUG ("G = %#lx\n", G); \ + ARC_DEBUG ("SDA_OFFSET = %#lx\n", _SDA_BASE_); \ ARC_DEBUG ("SDA_SET = %d\n", reloc_data.sdata_begin_symbol_vma_set); \ - ARC_DEBUG ("GOT_OFFSET = 0x%x\n", GOT); \ - ARC_DEBUG ("relocation = 0x%08x\n", relocation); \ - ARC_DEBUG ("before = 0x%08x\n", (unsigned int) insn); \ - ARC_DEBUG ("data = 0x%08x (%u) (%d)\n", (unsigned int) relocation, (unsigned int) relocation, (int) relocation); \ - } + ARC_DEBUG ("GOT_OFFSET = %#lx\n", GOT); \ + ARC_DEBUG ("relocation = %#08lx\n", relocation); \ + ARC_DEBUG ("before = %#08x\n", (unsigned) insn); \ + ARC_DEBUG ("data = %08x (%u) (%d)\n", (unsigned) relocation, \ + (unsigned) relocation, (int) relocation); \ + } \ + while (0) + +#define PRINT_DEBUG_RELOC_INFO_AFTER \ + do \ + { \ + ARC_DEBUG ("after = 0x%08x\n", (unsigned int) insn); \ + } \ + while (0) -#define PRINT_DEBUG_RELOC_INFO_AFTER \ - { \ - ARC_DEBUG ("after = 0x%08x\n", (unsigned int) insn); \ - } +#else + +#define PRINT_DEBUG_RELOC_INFO_BEFORE(...) +#define PRINT_DEBUG_RELOC_INFO_AFTER + +#endif /* ARC_ENABLE_DEBUG */ #define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ - case R_##TYPE: \ - { \ - bfd_vma bitsize ATTRIBUTE_UNUSED = BITSIZE; \ - relocation = FORMULA ; \ - PRINT_DEBUG_RELOC_INFO_BEFORE(FORMULA) \ - insn = RELOC_FUNCTION (insn, relocation); \ - PRINT_DEBUG_RELOC_INFO_AFTER \ - } \ + case R_##TYPE: \ + { \ + bfd_signed_vma bitsize ATTRIBUTE_UNUSED = BITSIZE; \ + relocation = FORMULA ; \ + PRINT_DEBUG_RELOC_INFO_BEFORE (#FORMULA, #TYPE); \ + insn = middle_endian_convert (insn, IS_ME (#FORMULA, abfd)); \ + insn = (* get_replace_function (abfd, TYPE)) (insn, relocation); \ + insn = middle_endian_convert (insn, IS_ME (#FORMULA, abfd)); \ + PRINT_DEBUG_RELOC_INFO_AFTER; \ + } \ break; -static bfd_vma -reverse_me (struct arc_relocation_data reloc_data, bfd_vma reloc) -{ - if (reloc_data.input_section && reloc_data.input_section->flags & SEC_CODE) - return ((0x0000fffff & reloc) << 16) | ((0xffff0000 & reloc) >> 16); - else - return reloc; -} - static bfd_reloc_status_type arc_do_relocation (bfd_byte * contents, struct arc_relocation_data reloc_data, struct bfd_link_info *info) { - bfd_vma relocation = 0; + bfd_signed_vma relocation = 0; bfd_vma insn; bfd_vma orig_insn ATTRIBUTE_UNUSED; + bfd * abfd = reloc_data.input_section->owner; struct elf_link_hash_table *htab ATTRIBUTE_UNUSED = elf_hash_table (info); + bfd_reloc_status_type flag; if (reloc_data.should_relocate == FALSE) return bfd_reloc_ok; @@ -899,13 +877,17 @@ arc_do_relocation (bfd_byte * contents, switch (reloc_data.howto->size) { case 2: - insn = arc_bfd_get_32 (reloc_data.input_section->owner, + insn = arc_bfd_get_32 (abfd, contents + reloc_data.reloc_offset, reloc_data.input_section); break; case 1: + insn = arc_bfd_get_16 (abfd, + contents + reloc_data.reloc_offset, + reloc_data.input_section); + break; case 0: - insn = arc_bfd_get_16 (reloc_data.input_section->owner, + insn = arc_bfd_get_8 (abfd, contents + reloc_data.reloc_offset, reloc_data.input_section); break; @@ -928,44 +910,40 @@ arc_do_relocation (bfd_byte * contents, /* Check for relocation overflow. */ if (reloc_data.howto->complain_on_overflow != complain_overflow_dont) - { - bfd_reloc_status_type flag; - flag = bfd_check_overflow (reloc_data.howto->complain_on_overflow, - reloc_data.howto->bitsize, - reloc_data.howto->rightshift, - bfd_arch_bits_per_address (reloc_data.input_section->owner), - relocation); - -#undef DEBUG_ARC_RELOC -#define DEBUG_ARC_RELOC(A) debug_arc_reloc (A) - if (flag != bfd_reloc_ok) - { - PR_DEBUG ( "Relocation overflows !!!!\n"); + flag = bfd_check_overflow (reloc_data.howto->complain_on_overflow, + reloc_data.howto->bitsize, + reloc_data.howto->rightshift, + bfd_arch_bits_per_address (abfd), + relocation); + else + flag = arc_special_overflow_checks (reloc_data, relocation, info); - DEBUG_ARC_RELOC (reloc_data); + if (flag != bfd_reloc_ok) + { + ARC_DEBUG ("Relocation overflows !\n"); + DEBUG_ARC_RELOC (reloc_data); + ARC_DEBUG ("Relocation value = signed -> %d, unsigned -> %u" + ", hex -> (0x%08x)\n", + (int) relocation, (unsigned) relocation, (int) relocation); - PR_DEBUG ( - "Relocation value = signed -> %d, unsigned -> %u" - ", hex -> (0x%08x)\n", - (int) relocation, - (unsigned int) relocation, - (unsigned int) relocation); - return flag; - } + return flag; } -#undef DEBUG_ARC_RELOC -#define DEBUG_ARC_RELOC(A) + /* Write updated instruction back to memory. */ switch (reloc_data.howto->size) { case 2: - arc_bfd_put_32 (reloc_data.input_section->owner, insn, + arc_bfd_put_32 (abfd, insn, contents + reloc_data.reloc_offset, reloc_data.input_section); break; case 1: + arc_bfd_put_16 (abfd, insn, + contents + reloc_data.reloc_offset, + reloc_data.input_section); + break; case 0: - arc_bfd_put_16 (reloc_data.input_section->owner, insn, + arc_bfd_put_8 (abfd, insn, contents + reloc_data.reloc_offset, reloc_data.input_section); break; @@ -992,28 +970,6 @@ arc_do_relocation (bfd_byte * contents, #undef ARC_RELOC_HOWTO -static struct got_entry ** -arc_get_local_got_ents (bfd * abfd) -{ - static struct got_entry **local_got_ents = NULL; - - if (local_got_ents == NULL) - { - size_t size; - Elf_Internal_Shdr *symtab_hdr = &((elf_tdata (abfd))->symtab_hdr); - - size = symtab_hdr->sh_info * sizeof (bfd_vma); - local_got_ents = (struct got_entry **) - bfd_alloc (abfd, sizeof(struct got_entry *) * size); - if (local_got_ents == NULL) - return FALSE; - - memset (local_got_ents, 0, sizeof(struct got_entry *) * size); - elf_local_got_ents (abfd) = local_got_ents; - } - - return local_got_ents; -} /* Relocate an arc ELF section. Function : elf_arc_relocate_section @@ -1030,36 +986,37 @@ arc_get_local_got_ents (bfd * abfd) corresponding to the st_shndx field of each local symbol. */ static bfd_boolean -elf_arc_relocate_section (bfd * output_bfd, +elf_arc_relocate_section (bfd * output_bfd, struct bfd_link_info * info, - bfd * input_bfd, - asection * input_section, - bfd_byte * contents, + bfd * input_bfd, + asection * input_section, + bfd_byte * contents, Elf_Internal_Rela * relocs, Elf_Internal_Sym * local_syms, - asection ** local_sections) + asection ** local_sections) { - Elf_Internal_Shdr * symtab_hdr; - struct elf_link_hash_entry ** sym_hashes; - struct got_entry ** local_got_ents; - Elf_Internal_Rela * rel; - Elf_Internal_Rela * relend; - struct elf_link_hash_table *htab = elf_hash_table (info); + Elf_Internal_Shdr * symtab_hdr; + struct elf_link_hash_entry ** sym_hashes; + Elf_Internal_Rela * rel; + Elf_Internal_Rela * wrel; + Elf_Internal_Rela * relend; + struct elf_link_hash_table * htab = elf_hash_table (info); symtab_hdr = &((elf_tdata (input_bfd))->symtab_hdr); sym_hashes = elf_sym_hashes (input_bfd); - rel = relocs; + rel = wrel = relocs; relend = relocs + input_section->reloc_count; - for (; rel < relend; rel++) + for (; rel < relend; wrel++, rel++) { enum elf_arc_reloc_type r_type; reloc_howto_type * howto; - unsigned long r_symndx; + unsigned long r_symndx; struct elf_link_hash_entry * h; Elf_Internal_Sym * sym; asection * sec; - struct elf_link_hash_entry *h2; + struct elf_link_hash_entry * h2; + const char * msg; struct arc_relocation_data reloc_data = { @@ -1083,7 +1040,7 @@ elf_arc_relocate_section (bfd * output_bfd, bfd_set_error (bfd_error_bad_value); return FALSE; } - howto = &elf_arc_howto_table[r_type]; + howto = arc_elf_howto (r_type); r_symndx = ELF32_R_SYM (rel->r_info); @@ -1105,21 +1062,15 @@ elf_arc_relocate_section (bfd * output_bfd, { sec = local_sections[r_symndx]; - /* for RELA relocs.Just adjust the addend + /* For RELA relocs. Just adjust the addend value in the relocation entry. */ rel->r_addend += sec->output_offset + sym->st_value; - BFD_DEBUG_PIC ( - PR_DEBUG ("local symbols reloc " - "(section=%d %s) seen in %s\n", - r_symndx, - local_sections[r_symndx]->name, - __PRETTY_FUNCTION__) - ); + ARC_DEBUG ("local symbols reloc (section=%d %s) seen in %s\n", + (int) r_symndx, local_sections[r_symndx]->name, + __PRETTY_FUNCTION__); } } - - continue; } h2 = elf_link_hash_lookup (elf_hash_table (info), "__SDATA_BEGIN__", @@ -1131,8 +1082,8 @@ elf_arc_relocate_section (bfd * output_bfd, /* TODO: Verify this condition. */ { reloc_data.sdata_begin_symbol_vma = - (h2->root.u.def.value + - h2->root.u.def.section->output_section->vma); + (h2->root.u.def.value + + h2->root.u.def.section->output_section->vma); reloc_data.sdata_begin_symbol_vma_set = TRUE; } @@ -1148,95 +1099,81 @@ elf_arc_relocate_section (bfd * output_bfd, if (r_symndx < symtab_hdr->sh_info) /* A local symbol. */ { - local_got_ents = arc_get_local_got_ents (output_bfd); - struct got_entry *entry = local_got_ents[r_symndx]; - sym = local_syms + r_symndx; sec = local_sections[r_symndx]; + } + else + { + /* TODO: This code is repeated from below. We should + clean it and remove duplications. + Sec is used check for discarded sections. + Need to redesign code below. */ - reloc_data.sym_value = sym->st_value; - reloc_data.sym_section = sec; + /* Get the symbol's entry in the symtab. */ + 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 ((is_reloc_for_GOT (howto) - || is_reloc_for_TLS (howto)) && entry != NULL) + /* If we have encountered a definition for this symbol. */ + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) { - if (is_reloc_for_TLS (howto)) - while (entry->type == GOT_NORMAL && entry->next != NULL) - entry = entry->next; + reloc_data.sym_value = h->root.u.def.value; + sec = h->root.u.def.section; + } + } - if (is_reloc_for_GOT (howto)) - while (entry->type != GOT_NORMAL && entry->next != NULL) - entry = entry->next; + /* Clean relocs for symbols in discarded sections. */ + if (sec != NULL && discarded_section (sec)) + { + _bfd_clear_contents (howto, input_bfd, input_section, + contents + rel->r_offset); + rel->r_offset = rel->r_offset; + rel->r_info = 0; + rel->r_addend = 0; + + /* For ld -r, remove relocations in debug sections against + sections defined in discarded sections. Not done for + eh_frame editing code expects to be present. */ + if (bfd_link_relocatable (info) + && (input_section->flags & SEC_DEBUGGING)) + wrel--; - if (entry->type == GOT_TLS_GD && entry->processed == FALSE) - { - bfd_vma sym_vma = sym->st_value - + sec->output_section->vma - + sec->output_offset; - - /* Create dynamic relocation for local sym. */ - ADD_RELA (output_bfd, got, entry->offset, 0, - R_ARC_TLS_DTPMOD, 0); - ADD_RELA (output_bfd, got, entry->offset+4, 0, - R_ARC_TLS_DTPOFF, 0); - - bfd_vma sec_vma = sec->output_section->vma - + sec->output_offset; - bfd_put_32 (output_bfd, sym_vma - sec_vma, - htab->sgot->contents + entry->offset + 4); - - ARC_DEBUG ("arc_info: FIXED -> GOT_TLS_GD value " - "= 0x%x @ 0x%x, for symbol %s\n", - sym_vma - sec_vma, - htab->sgot->contents + entry->offset + 4, - "(local)"); - - entry->processed = TRUE; - } - if (entry->type == GOT_TLS_IE && entry->processed == FALSE) - { - bfd_vma sym_vma = sym->st_value - + sec->output_section->vma - + sec->output_offset; - bfd_vma sec_vma = htab->tls_sec->output_section->vma; - bfd_put_32 (output_bfd, sym_vma - sec_vma, - htab->sgot->contents + entry->offset); - /* TODO: Check if this type of relocs is the cause - for all the ARC_NONE dynamic relocs. */ - - ARC_DEBUG ("arc_info: FIXED -> GOT_TLS_IE value = " - "0x%x @ 0x%x, for symbol %s\n", - sym_vma - sec_vma, - htab->sgot->contents + entry->offset, - "(local)"); - - entry->processed = TRUE; - } - if (entry->type == GOT_NORMAL && entry->processed == FALSE) - { - bfd_vma sec_vma = reloc_data.sym_section->output_section->vma - + reloc_data.sym_section->output_offset; - - bfd_put_32 (output_bfd, reloc_data.sym_value + sec_vma, - htab->sgot->contents + entry->offset); - - ARC_DEBUG ("arc_info: PATCHED: 0x%08x @ 0x%08x for " - "sym %s in got offset 0x%x\n", - reloc_data.sym_value + sec_vma, - htab->sgot->output_section->vma - + htab->sgot->output_offset + entry->offset, - "(local)", - entry->offset); - entry->processed = TRUE; - } + continue; + } - reloc_data.got_offset_value = entry->offset; - ARC_DEBUG ("arc_info: GOT_ENTRY = %d, offset = 0x%x, " - "vma = 0x%x for symbol %s\n", - entry->type, entry->offset, - htab->sgot->output_section->vma - + htab->sgot->output_offset + entry->offset, - "(local)"); + if (bfd_link_relocatable (info)) + { + if (wrel != rel) + *wrel = *rel; + continue; + } + + if (r_symndx < symtab_hdr->sh_info) /* A local symbol. */ + { + reloc_data.sym_value = sym->st_value; + reloc_data.sym_section = sec; + reloc_data.symbol_name = + bfd_elf_string_from_elf_section (input_bfd, + symtab_hdr->sh_link, + sym->st_name); + + /* Mergeable section handling. */ + if ((sec->flags & SEC_MERGE) + && ELF_ST_TYPE (sym->st_info) == STT_SECTION) + { + asection *msec; + msec = sec; + rel->r_addend = _bfd_elf_rel_local_sym (output_bfd, sym, + &msec, rel->r_addend); + rel->r_addend -= (sec->output_section->vma + + sec->output_offset + + sym->st_value); + rel->r_addend += msec->output_section->vma + msec->output_offset; + + reloc_data.reloc_addend = rel->r_addend; } BFD_ASSERT (htab->sgot != NULL || !is_reloc_for_GOT (howto)); @@ -1248,6 +1185,9 @@ elf_arc_relocate_section (bfd * output_bfd, } else /* Global symbol. */ { + /* FIXME: We should use the RELOC_FOR_GLOBAL_SYMBOL macro + (defined in elf-bfd.h) here. */ + /* Get the symbol's entry in the symtab. */ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; @@ -1255,7 +1195,10 @@ elf_arc_relocate_section (bfd * output_bfd, || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; - BFD_ASSERT ((h->dynindx == -1) >= (h->forced_local != 0)); + /* TODO: Need to validate what was the intention. */ + /* BFD_ASSERT ((h->dynindx == -1) || (h->forced_local != 0)); */ + reloc_data.symbol_name = h->root.root.string; + /* If we have encountered a definition for this symbol. */ if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) @@ -1319,116 +1262,21 @@ elf_arc_relocate_section (bfd * output_bfd, } else if (is_reloc_for_PLT (howto)) { + /* Fail if it is linking for PIE and the symbol is + undefined. */ + if (bfd_link_executable (info)) + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_offset, TRUE); reloc_data.sym_value = h->plt.offset; reloc_data.sym_section = htab->splt; reloc_data.should_relocate = TRUE; } - else if (!(*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_offset,!bfd_link_pic (info))) - { - return FALSE; - } - } - - if (h->got.glist != NULL) - { - struct got_entry *entry = h->got.glist; - - if (is_reloc_for_GOT (howto) || is_reloc_for_TLS (howto)) - { - if (! elf_hash_table (info)->dynamic_sections_created - || (bfd_link_pic (info) - && SYMBOL_REFERENCES_LOCAL (info, h))) - { - reloc_data.sym_value = h->root.u.def.value; - reloc_data.sym_section = h->root.u.def.section; - - if (is_reloc_for_TLS (howto)) - while (entry->type == GOT_NORMAL && entry->next != NULL) - entry = entry->next; - - if (entry->processed == FALSE - && (entry->type == GOT_TLS_GD - || entry->type == GOT_TLS_IE)) - { - bfd_vma sym_value = h->root.u.def.value - + h->root.u.def.section->output_section->vma - + h->root.u.def.section->output_offset; - - bfd_vma sec_vma = - elf_hash_table (info)->tls_sec->output_section->vma; - - bfd_put_32 (output_bfd, - sym_value - sec_vma, - htab->sgot->contents + entry->offset - + (entry->existing_entries == MOD_AND_OFF ? 4 : 0)); - - ARC_DEBUG ("arc_info: FIXED -> %s value = 0x%x " - "@ 0x%x, for symbol %s\n", - (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" : - "GOT_TLS_IE"), - sym_value - sec_vma, - htab->sgot->contents + entry->offset - + (entry->existing_entries == MOD_AND_OFF ? 4 : 0), - h->root.root.string); - - entry->processed = TRUE; - } - - if (entry->type == GOT_TLS_IE && entry->processed == FALSE) - { - bfd_vma sec_vma = htab->tls_sec->output_section->vma; - bfd_put_32 (output_bfd, - reloc_data.sym_value - sec_vma, - htab->sgot->contents + entry->offset); - } - - if (entry->type == GOT_NORMAL && entry->processed == FALSE) - { - bfd_vma sec_vma = - reloc_data.sym_section->output_section->vma - + reloc_data.sym_section->output_offset; - - if (h->root.type != bfd_link_hash_undefweak) - { - bfd_put_32 (output_bfd, - reloc_data.sym_value + sec_vma, - htab->sgot->contents + entry->offset); - - ARC_DEBUG ("arc_info: PATCHED: 0x%08x " - "@ 0x%08x for sym %s in got offset 0x%x\n", - reloc_data.sym_value + sec_vma, - htab->sgot->output_section->vma - + htab->sgot->output_offset + entry->offset, - h->root.root.string, - entry->offset); - } - else - { - ARC_DEBUG ("arc_info: PATCHED: NOT_PATCHED " - "@ 0x%08x for sym %s in got offset 0x%x " - "(is undefweak)\n", - htab->sgot->output_section->vma - + htab->sgot->output_offset + entry->offset, - h->root.root.string, - entry->offset); - } - - entry->processed = TRUE; - } - } - } - - reloc_data.got_offset_value = entry->offset; - - ARC_DEBUG ("arc_info: GOT_ENTRY = %d, offset = 0x%x, " - "vma = 0x%x for symbol %s\n", - entry->type, entry->offset, - htab->sgot->output_section->vma - + htab->sgot->output_offset + entry->offset, - h->root.root.string); + else if (!bfd_link_pic (info)) + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_offset, TRUE); } BFD_ASSERT (htab->sgot != NULL || !is_reloc_for_GOT (howto)); @@ -1437,13 +1285,39 @@ elf_arc_relocate_section (bfd * output_bfd, + htab->sgot->output_offset; } + if ((is_reloc_for_GOT (howto) + || is_reloc_for_TLS (howto))) + { + struct got_entry **list + = get_got_entry_list_for_symbol (output_bfd, r_symndx, h); + + reloc_data.got_offset_value + = relocate_fix_got_relocs_for_got_info (list, + tls_type_for_reloc (howto), + info, + output_bfd, + r_symndx, + local_syms, + local_sections, + h, + &reloc_data); + + if (h == NULL) + { + create_got_dynrelocs_for_single_entry ( + got_entry_for_type (list, + arc_got_entry_type_for_reloc (howto)), + output_bfd, info, NULL); + } + } + switch (r_type) { case R_ARC_32: case R_ARC_32_ME: case R_ARC_PC32: case R_ARC_32_PCREL: - if (bfd_link_pic (info) + if ((bfd_link_pic (info))// || bfd_link_pie (info)) && ((r_type != R_ARC_PC32 && r_type != R_ARC_32_PCREL) || (h != NULL && h->dynindx != -1 @@ -1470,19 +1344,29 @@ elf_arc_relocate_section (bfd * output_bfd, outrel.r_offset += (input_section->output_section->vma + input_section->output_offset); +#define IS_ARC_PCREL_TYPE(TYPE) \ + ( (TYPE == R_ARC_PC32) \ + || (TYPE == R_ARC_32_PCREL)) + if (skip) { memset (&outrel, 0, sizeof outrel); relocate = FALSE; } - else if (r_type == R_ARC_PC32 - || r_type == R_ARC_32_PCREL) + else if (h != NULL + && h->dynindx != -1 + && ((IS_ARC_PCREL_TYPE (r_type)) + || !(bfd_link_executable (info) + || SYMBOLIC_BIND (info, h)) + || ! h->def_regular)) { - BFD_ASSERT (h != NULL && h->dynindx != -1); + BFD_ASSERT (h != NULL); if ((input_section->flags & SEC_ALLOC) != 0) relocate = FALSE; else relocate = TRUE; + + BFD_ASSERT (h->dynindx != -1); outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); } else @@ -1497,24 +1381,9 @@ elf_arc_relocate_section (bfd * output_bfd, dynamic symbol table, and it's a regular symbol not defined in a shared object, then treat the symbol as local, resolve it now. */ - if (h == NULL - || ((info->symbolic || h->dynindx == -1) - && h->def_regular) - || h->forced_local) - { - relocate = TRUE; - /* outrel.r_addend = 0; */ - outrel.r_info = ELF32_R_INFO (0, R_ARC_RELATIVE); - } - else - { - BFD_ASSERT (h->dynindx != -1); - if ((input_section->flags & SEC_ALLOC) != 0) - relocate = FALSE; - else - relocate = TRUE; - outrel.r_info = ELF32_R_INFO (h->dynindx, R_ARC_32); - } + relocate = TRUE; + /* outrel.r_addend = 0; */ + outrel.r_info = ELF32_R_INFO (0, R_ARC_RELATIVE); } BFD_ASSERT (sreloc->contents != 0); @@ -1544,8 +1413,58 @@ elf_arc_relocate_section (bfd * output_bfd, DEBUG_ARC_RELOC (reloc_data); - if (arc_do_relocation (contents, reloc_data, info) != bfd_reloc_ok) - return FALSE; + /* Make sure we have with a dynamic linker. In case of GOT and PLT + the sym_section should point to .got or .plt respectively. */ + if ((is_reloc_for_GOT (howto) || is_reloc_for_PLT (howto)) + && reloc_data.sym_section == NULL) + { + (*_bfd_error_handler) + (_("GOT and PLT relocations cannot be fixed with a non dynamic linker.")); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + msg = NULL; + switch (arc_do_relocation (contents, reloc_data, info)) + { + case bfd_reloc_ok: + continue; /* The reloc processing loop. */ + + case bfd_reloc_overflow: + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), reloc_data.symbol_name, howto->name, (bfd_vma) 0, + input_bfd, input_section, rel->r_offset); + break; + + case bfd_reloc_undefined: + (*info->callbacks->undefined_symbol) + (info, reloc_data.symbol_name, input_bfd, input_section, rel->r_offset, TRUE); + break; + + case bfd_reloc_other: + msg = _("%B(%A): warning: unaligned access to symbol '%s' in the small data area"); + break; + + case bfd_reloc_outofrange: + msg = _("%B(%A): internal error: out of range error"); + break; + + case bfd_reloc_notsupported: + msg = _("%B(%A): internal error: unsupported relocation error"); + break; + + case bfd_reloc_dangerous: + msg = _("%B(%A): internal error: dangerous relocation"); + break; + + default: + msg = _("%B(%A): internal error: unknown error"); + break; + } + + if (msg) + _bfd_error_handler (msg, input_bfd, input_section, reloc_data.symbol_name); + return FALSE; } return TRUE; @@ -1603,38 +1522,18 @@ arc_create_dynamic_sections (bfd * abfd, struct bfd_link_info *info) return ds; } -#define ADD_SYMBOL_REF_SEC_AND_RELOC(SECNAME, COND_FOR_RELOC, H) \ - htab->s##SECNAME->size; \ - { \ - if (COND_FOR_RELOC) \ - { \ - htab->srel##SECNAME->size += sizeof (Elf32_External_Rela); \ - ARC_DEBUG ("arc_info: Added reloc space in " \ - #SECNAME " section at " __FILE__ \ - ":%d for symbol\n", \ - __LINE__, name_for_global_symbol (H)); \ - } \ - if (H) \ - if (h->dynindx == -1 && !h->forced_local) \ - if (! bfd_elf_link_record_dynamic_symbol (info, H)) \ - return FALSE; \ - htab->s##SECNAME->size += 4; \ - } - static bfd_boolean -elf_arc_check_relocs (bfd * abfd, +elf_arc_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 got_entry ** local_got_ents; const Elf_Internal_Rela * rel; const Elf_Internal_Rela * rel_end; bfd * dynobj; asection * sreloc = NULL; - struct elf_link_hash_table * htab = elf_hash_table (info); if (bfd_link_relocatable (info)) return TRUE; @@ -1642,7 +1541,6 @@ elf_arc_check_relocs (bfd * abfd, dynobj = (elf_hash_table (info))->dynobj; symtab_hdr = &((elf_tdata (abfd))->symtab_hdr); sym_hashes = elf_sym_hashes (abfd); - local_got_ents = arc_get_local_got_ents (abfd); rel_end = relocs + sec->reloc_count; for (rel = relocs; rel < rel_end; rel++) @@ -1659,7 +1557,7 @@ elf_arc_check_relocs (bfd * abfd, bfd_set_error (bfd_error_bad_value); return FALSE; } - howto = &elf_arc_howto_table[r_type]; + howto = arc_elf_howto (r_type); if (dynobj == NULL && (is_reloc_for_GOT (howto) == TRUE @@ -1686,9 +1584,11 @@ elf_arc_check_relocs (bfd * abfd, and the dynamic linker can not resolve these. However the error should not occur for e.g. debugging or non-readonly sections. */ - if (bfd_link_dll (info) && !bfd_link_pie (info) + if ((bfd_link_dll (info) && !bfd_link_pie (info)) && (sec->flags & SEC_ALLOC) != 0 - && (sec->flags & SEC_READONLY) != 0) + && (sec->flags & SEC_READONLY) != 0 + && ((sec->flags & SEC_CODE) != 0 + || (sec->flags & SEC_DEBUGGING) != 0)) { const char *name; if (h) @@ -1715,7 +1615,7 @@ elf_arc_check_relocs (bfd * abfd, /* FALLTHROUGH */ case R_ARC_PC32: case R_ARC_32_PCREL: - if (bfd_link_pic (info) + if ((bfd_link_pic (info))// || bfd_link_pie (info)) && ((r_type != R_ARC_PC32 && r_type != R_ARC_32_PCREL) || (h != NULL && h->dynindx != -1 @@ -1746,75 +1646,15 @@ elf_arc_check_relocs (bfd * abfd, h->needs_plt = 1; } - if (is_reloc_for_GOT (howto) == TRUE) + /* Add info to the symbol got_entry_list. */ + if (is_reloc_for_GOT (howto) == TRUE + || is_reloc_for_TLS (howto) == TRUE) { - if (h == NULL) - { - /* Local symbol. */ - if (local_got_ents[r_symndx] == NULL) - { - bfd_vma offset = - ADD_SYMBOL_REF_SEC_AND_RELOC (got, - bfd_link_pic (info), - NULL); - new_got_entry_to_list (&(local_got_ents[r_symndx]), - GOT_NORMAL, offset, NONE); - } - } - else - { - /* Global symbol. */ - h = sym_hashes[r_symndx - symtab_hdr->sh_info]; - if (h->got.glist == NULL) - { - bfd_vma offset = - ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h); - new_got_entry_to_list (&h->got.glist, - GOT_NORMAL, offset, NONE); - } - } - } - - if (is_reloc_for_TLS (howto) == TRUE) - { - enum tls_type_e type = GOT_UNKNOWN; - - switch (r_type) - { - case R_ARC_TLS_GD_GOT: - type = GOT_TLS_GD; - break; - case R_ARC_TLS_IE_GOT: - type = GOT_TLS_IE; - break; - default: - break; - } - - struct got_entry **list = NULL; - if (h != NULL) - list = &(h->got.glist); - else - list = &(local_got_ents[r_symndx]); - - if (type != GOT_UNKNOWN && !symbol_has_entry_of_type (*list, type)) - { - enum tls_got_entries entries = NONE; - bfd_vma offset = - ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h); - - if (type == GOT_TLS_GD) - { - bfd_vma ATTRIBUTE_UNUSED notneeded = - ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h); - entries = MOD_AND_OFF; - } - - if (entries == NONE) - entries = OFF; - - new_got_entry_to_list (list, type, offset, entries); - } + arc_fill_got_info_for_reloc ( + arc_got_entry_type_for_reloc (howto), + get_got_entry_list_for_symbol (abfd, r_symndx, h), + info, + h); } } @@ -1831,8 +1671,8 @@ arc_get_plt_version (struct bfd_link_info *info) for (i = 0; i < 1; i++) { ARC_DEBUG ("%d: size1 = %d, size2 = %d\n", i, - plt_versions[i].entry_size, - plt_versions[i].elem_size); + (int) plt_versions[i].entry_size, + (int) plt_versions[i].elem_size); } if (bfd_get_mach (info->output_bfd) == bfd_mach_arc_arcv2) @@ -1867,7 +1707,7 @@ add_symbol_to_plt (struct bfd_link_info *info) ret = htab->splt->size; htab->splt->size += plt_data->elem_size; - ARC_DEBUG ("PLT_SIZE = %d\n", htab->splt->size); + ARC_DEBUG ("PLT_SIZE = %d\n", (int) htab->splt->size); htab->sgotplt->size += 4; htab->srelplt->size += sizeof (Elf32_External_Rela); @@ -1892,9 +1732,9 @@ plt_do_relocs_for_symbol (bfd *abfd, switch (SYM_ONLY (reloc->symbol)) { case SGOT: - relocation = - htab->sgotplt->output_section->vma + - htab->sgotplt->output_offset + symbol_got_offset; + relocation + = htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset + symbol_got_offset; break; } relocation += reloc->addend; @@ -1912,11 +1752,11 @@ plt_do_relocs_for_symbol (bfd *abfd, /* TODO: being ME is not a property of the relocation but of the section of which is applying the relocation. */ - if (IS_MIDDLE_ENDIAN (reloc->symbol) || bfd_big_endian (abfd)) + if (IS_MIDDLE_ENDIAN (reloc->symbol) && !bfd_big_endian (abfd)) { - relocation = - ((relocation & 0xffff0000) >> 16) | - ((relocation & 0xffff) << 16); + relocation + = ((relocation & 0xffff0000) >> 16) + | ((relocation & 0xffff) << 16); } switch (reloc->size) @@ -1944,21 +1784,31 @@ relocate_plt_for_symbol (bfd *output_bfd, / plt_data->elem_size; bfd_vma got_offset = (plt_index + 3) * 4; - ARC_DEBUG ("arc_info: PLT_OFFSET = 0x%x, PLT_ENTRY_VMA = 0x%x, \ -GOT_ENTRY_OFFSET = 0x%x, GOT_ENTRY_VMA = 0x%x, for symbol %s\n", - h->plt.offset, - htab->splt->output_section->vma - + htab->splt->output_offset - + h->plt.offset, - got_offset, - htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset - + got_offset, + ARC_DEBUG ("arc_info: PLT_OFFSET = %#lx, PLT_ENTRY_VMA = %#lx, \ +GOT_ENTRY_OFFSET = %#lx, GOT_ENTRY_VMA = %#lx, for symbol %s\n", + (long) h->plt.offset, + (long) (htab->splt->output_section->vma + + htab->splt->output_offset + + h->plt.offset), + (long) got_offset, + (long) (htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset + + got_offset), h->root.root.string); - memcpy (htab->splt->contents + h->plt.offset, - plt_data->elem, - plt_data->elem_size); + { + bfd_vma i = 0; + uint16_t *ptr = (uint16_t *) plt_data->elem; + + for (i = 0; i < plt_data->elem_size/2; i++) + { + uint16_t data = ptr[i]; + bfd_put_16 (output_bfd, + (bfd_vma) data, + htab->splt->contents + h->plt.offset + (i*2)); + } + } + plt_do_relocs_for_symbol (output_bfd, htab, plt_data->elem_relocs, h->plt.offset, @@ -1979,6 +1829,8 @@ GOT_ENTRY_OFFSET = 0x%x, GOT_ENTRY_VMA = 0x%x, for symbol %s\n", + htab->sgotplt->output_offset + got_offset); rel.r_addend = 0; + + BFD_ASSERT (h->dynindx != -1); rel.r_info = ELF32_R_INFO (h->dynindx, R_ARC_JMP_SLOT); loc = htab->srelplt->contents; @@ -1994,8 +1846,17 @@ relocate_plt_for_entry (bfd *abfd, struct plt_version_t *plt_data = arc_get_plt_version (info); struct elf_link_hash_table *htab = elf_hash_table (info); - memcpy (htab->splt->contents, plt_data->entry, - plt_data->entry_size); + { + bfd_vma i = 0; + uint16_t *ptr = (uint16_t *) plt_data->entry; + for (i = 0; i < plt_data->entry_size/2; i++) + { + uint16_t data = ptr[i]; + bfd_put_16 (abfd, + (bfd_vma) data, + htab->splt->contents + (i*2)); + } + } PLT_DO_RELOCS_FOR_ENTRY (abfd, htab, plt_data->entry_relocs); } @@ -2010,7 +1871,6 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) { asection *s; - unsigned int power_of_two; bfd *dynobj = (elf_hash_table (info))->dynobj; struct elf_link_hash_table *htab = elf_hash_table (info); @@ -2039,7 +1899,7 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, { bfd_vma loc = add_symbol_to_plt (info); - if (!bfd_link_pic (info) && !h->def_regular) + if (bfd_link_executable (info) && !h->def_regular) { h->root.u.def.section = htab->splt; h->root.u.def.value = loc; @@ -2066,11 +1926,6 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, return TRUE; } - /* If there are no non-GOT references, we do not need a copy - relocation. */ - if (!h->non_got_ref) - return TRUE; - /* This is a reference to a symbol defined by a dynamic object which is not a function. */ @@ -2078,9 +1933,21 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, 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 (bfd_link_pic (info)) + if (!bfd_link_executable (info)) return TRUE; + /* If there are no non-GOT references, we do not need a copy + relocation. */ + 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; + } + /* 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 @@ -2091,8 +1958,8 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, 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); + if (htab == NULL) + return FALSE; /* We must generate a R_ARC_COPY reloc to tell the dynamic linker to copy the initial value out of the dynamic object and into the @@ -2108,28 +1975,10 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, h->needs_copy = 1; } - /* We need to figure out the alignment required for this symbol. I - have no idea how ELF linkers handle this. */ - power_of_two = bfd_log2 (h->size); - if (power_of_two > 3) - power_of_two = 3; - - /* Apply the required alignment. */ - s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two)); - if (power_of_two > bfd_get_section_alignment (dynobj, s)) - { - if (! bfd_set_section_alignment (dynobj, s, power_of_two)) - return FALSE; - } - - /* Define the symbol as being at this point in the section. */ - h->root.u.def.section = s; - h->root.u.def.value = s->size; - - /* Increment the section size to make room for the symbol. */ - s->size += h->size; + s = bfd_get_section_by_name (dynobj, ".dynbss"); + BFD_ASSERT (s != NULL); - return TRUE; + return _bfd_elf_adjust_dynamic_copy (info, h, s); } /* Function : elf_arc_finish_dynamic_symbol @@ -2159,81 +2008,15 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd, } } - if (h->got.glist != NULL) - { - struct got_entry *list = h->got.glist; - - /* Traverse the list of got entries for this symbol. */ - while (list) - { - bfd_vma got_offset = h->got.glist->offset; - - if (list->type == GOT_NORMAL - && list->created_dyn_relocation == FALSE) - { - if (bfd_link_pic (info) - && (info->symbolic || h->dynindx == -1) - && h->def_regular) - { - ADD_RELA (output_bfd, got, got_offset, 0, R_ARC_RELATIVE, 0); - } - else - { - ADD_RELA (output_bfd, got, got_offset, h->dynindx, - R_ARC_GLOB_DAT, 0); - } - list->created_dyn_relocation = TRUE; - } - else if (list->existing_entries != NONE) - { - struct elf_link_hash_table *htab = elf_hash_table (info); - enum tls_got_entries e = list->existing_entries; - - BFD_ASSERT (list->type != GOT_TLS_GD - || list->existing_entries == MOD_AND_OFF); - bfd_vma dynindx = h->dynindx == -1 ? 0 : h->dynindx; - if (e == MOD_AND_OFF || e == MOD) - { - ADD_RELA (output_bfd, got, got_offset, dynindx, - R_ARC_TLS_DTPMOD, 0); - ARC_DEBUG ("arc_info: TLS_DYNRELOC: type = %d, \ -GOT_OFFSET = 0x%x, GOT_VMA = 0x%x, INDEX = %d, ADDEND = 0x%x\n", - list->type, - got_offset, - htab->sgot->output_section->vma - + htab->sgot->output_offset + got_offset, - dynindx, 0); - } - if (e == MOD_AND_OFF || e == OFF) - { - bfd_vma addend = 0; - if (list->type == GOT_TLS_IE) - addend = bfd_get_32 (output_bfd, - htab->sgot->contents + got_offset); - - ADD_RELA (output_bfd, got, - got_offset + (e == MOD_AND_OFF ? 4 : 0), - dynindx, - (list->type == GOT_TLS_IE ? - R_ARC_TLS_TPOFF : R_ARC_TLS_DTPOFF), - addend); - - ARC_DEBUG ("arc_info: TLS_DYNRELOC: type = %d, \ -GOT_OFFSET = 0x%x, GOT_VMA = 0x%x, INDEX = %d, ADDEND = 0x%x\n", - list->type, - got_offset, - htab->sgot->output_section->vma - + htab->sgot->output_offset + got_offset, - dynindx, addend); - } - } - - list = list->next; - } - - h->got.glist = NULL; - } + /* This function traverses list of GOT entries and + create respective dynamic relocs. */ + /* TODO: Make function to get list and not access the list directly. */ + /* TODO: Move function to relocate_section create this relocs eagerly. */ + create_got_dynrelocs_for_got_info (&h->got.glist, + output_bfd, + info, + h); if (h->needs_copy) { @@ -2241,8 +2024,8 @@ GOT_OFFSET = 0x%x, GOT_VMA = 0x%x, INDEX = %d, ADDEND = 0x%x\n", + h->root.u.def.section->output_section->vma + h->root.u.def.section->output_offset); - asection *srelbss = - bfd_get_section_by_name (h->root.u.def.section->owner, + asection *srelbss + = bfd_get_section_by_name (h->root.u.def.section->owner, ".rela.bss"); bfd_byte * loc = srelbss->contents @@ -2252,6 +2035,8 @@ GOT_OFFSET = 0x%x, GOT_VMA = 0x%x, INDEX = %d, ADDEND = 0x%x\n", Elf_Internal_Rela rel; rel.r_addend = 0; rel.r_offset = rel_offset; + + BFD_ASSERT (h->dynindx != -1); rel.r_info = ELF32_R_INFO (h->dynindx, R_ARC_COPY); bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); @@ -2266,19 +2051,13 @@ GOT_OFFSET = 0x%x, GOT_VMA = 0x%x, INDEX = %d, ADDEND = 0x%x\n", return TRUE; } -#define GET_SYMBOL_OR_SECTION(TAG, SYMBOL, SECTION, ASSERT) \ +#define GET_SYMBOL_OR_SECTION(TAG, SYMBOL, SECTION) \ case TAG: \ if (SYMBOL != NULL) \ - { \ - h = elf_link_hash_lookup (elf_hash_table (info), \ - SYMBOL, FALSE, FALSE, TRUE); \ - } \ + h = elf_link_hash_lookup (elf_hash_table (info), \ + SYMBOL, FALSE, FALSE, TRUE); \ else if (SECTION != NULL) \ - { \ - s = bfd_get_section_by_name (output_bfd, SECTION); \ - BFD_ASSERT (s != NULL || !ASSERT); \ - do_it = TRUE; \ - } \ + s = bfd_get_linker_section (dynobj, SECTION); \ break; /* Function : elf_arc_finish_dynamic_sections @@ -2302,8 +2081,8 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, Elf32_External_Dyn *dyncon, *dynconend; dyncon = (Elf32_External_Dyn *) ds.sdyn->contents; - dynconend = - (Elf32_External_Dyn *) (ds.sdyn->contents + ds.sdyn->size); + dynconend + = (Elf32_External_Dyn *) (ds.sdyn->contents + ds.sdyn->size); for (; dyncon < dynconend; dyncon++) { Elf_Internal_Dyn internal_dyn; @@ -2316,15 +2095,15 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, switch (internal_dyn.d_tag) { - GET_SYMBOL_OR_SECTION (DT_INIT, "_init", NULL, TRUE) - GET_SYMBOL_OR_SECTION (DT_FINI, "_fini", NULL, TRUE) - GET_SYMBOL_OR_SECTION (DT_PLTGOT, NULL, ".plt", TRUE) - GET_SYMBOL_OR_SECTION (DT_JMPREL, NULL, ".rela.plt", TRUE) - GET_SYMBOL_OR_SECTION (DT_PLTRELSZ, NULL, ".rela.plt", TRUE) - GET_SYMBOL_OR_SECTION (DT_RELASZ, NULL, ".rela.plt", FALSE) - GET_SYMBOL_OR_SECTION (DT_VERSYM, NULL, ".gnu.version", TRUE) - GET_SYMBOL_OR_SECTION (DT_VERDEF, NULL, ".gnu.version_d", TRUE) - GET_SYMBOL_OR_SECTION (DT_VERNEED, NULL, ".gnu.version_r", TRUE) + GET_SYMBOL_OR_SECTION (DT_INIT, "_init", NULL) + GET_SYMBOL_OR_SECTION (DT_FINI, "_fini", NULL) + GET_SYMBOL_OR_SECTION (DT_PLTGOT, NULL, ".plt") + GET_SYMBOL_OR_SECTION (DT_JMPREL, NULL, ".rela.plt") + GET_SYMBOL_OR_SECTION (DT_PLTRELSZ, NULL, ".rela.plt") + GET_SYMBOL_OR_SECTION (DT_RELASZ, NULL, ".rela.plt") + GET_SYMBOL_OR_SECTION (DT_VERSYM, NULL, ".gnu.version") + GET_SYMBOL_OR_SECTION (DT_VERDEF, NULL, ".gnu.version_d") + GET_SYMBOL_OR_SECTION (DT_VERNEED, NULL, ".gnu.version_r") default: break; } @@ -2341,8 +2120,8 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, if (asec_ptr->output_section != NULL) { internal_dyn.d_un.d_val += - (asec_ptr->output_section->vma + - asec_ptr->output_offset); + (asec_ptr->output_section->vma + + asec_ptr->output_offset); } else { @@ -2361,7 +2140,8 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, case DT_VERSYM: case DT_VERDEF: case DT_VERNEED: - internal_dyn.d_un.d_ptr = s->vma; + internal_dyn.d_un.d_ptr = (s->output_section->vma + + s->output_offset); do_it = TRUE; break; @@ -2381,7 +2161,7 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, } } - if (do_it == TRUE) + if (do_it) bfd_elf32_swap_dyn_out (output_bfd, &internal_dyn, dyncon); } @@ -2398,17 +2178,24 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, /* Fill in the first three entries in the global offset table. */ if (htab->sgot) { - if (htab->sgot->size > 0 || htab->sgotplt->size > 0) + struct elf_link_hash_entry *h; + h = elf_link_hash_lookup (elf_hash_table (info), "_GLOBAL_OFFSET_TABLE_", + FALSE, FALSE, TRUE); + + if (h != NULL && h->root.type != bfd_link_hash_undefined + && h->root.u.def.section != NULL) { + asection *sec = h->root.u.def.section; + if (ds.sdyn == NULL) bfd_put_32 (output_bfd, (bfd_vma) 0, - htab->sgotplt->contents); + sec->contents); else bfd_put_32 (output_bfd, ds.sdyn->output_section->vma + ds.sdyn->output_offset, - htab->sgotplt->contents); - bfd_put_32 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 4); - bfd_put_32 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 8); + sec->contents); + bfd_put_32 (output_bfd, (bfd_vma) 0, sec->contents + 4); + bfd_put_32 (output_bfd, (bfd_vma) 0, sec->contents + 8); } } @@ -2536,7 +2323,7 @@ elf_arc_size_dynamic_sections (bfd * output_bfd, if (relocs_exist == TRUE) 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_RELENT, + || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT, sizeof (Elf32_External_Rela)) ) return FALSE; @@ -2549,6 +2336,32 @@ elf_arc_size_dynamic_sections (bfd * output_bfd, return TRUE; } + +/* Classify dynamic relocs such that -z combreloc can reorder and combine + them. */ +static enum elf_reloc_type_class +elf32_arc_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, + const asection *rel_sec ATTRIBUTE_UNUSED, + const Elf_Internal_Rela *rela) +{ + switch ((int) ELF32_R_TYPE (rela->r_info)) + { + case R_ARC_RELATIVE: + return reloc_class_relative; + case R_ARC_JMP_SLOT: + return reloc_class_plt; + case R_ARC_COPY: + return reloc_class_copy; + /* TODO: Needed in future to support ifunc. */ + /* + case R_ARC_IRELATIVE: + return reloc_class_ifunc; + */ + default: + return reloc_class_normal; + } +} + const struct elf_size_info arc_elf32_size_info = { sizeof (Elf32_External_Ehdr), @@ -2618,11 +2431,10 @@ elf_arc_add_symbol_hook (bfd * abfd, asection ** secp ATTRIBUTE_UNUSED, bfd_vma * valp ATTRIBUTE_UNUSED) { - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; return TRUE; } @@ -2652,12 +2464,14 @@ elf_arc_add_symbol_hook (bfd * abfd, #define elf_backend_check_relocs elf_arc_check_relocs #define elf_backend_create_dynamic_sections _bfd_elf_create_dynamic_sections +#define elf_backend_reloc_type_class elf32_arc_reloc_type_class + #define elf_backend_adjust_dynamic_symbol elf_arc_adjust_dynamic_symbol #define elf_backend_finish_dynamic_symbol elf_arc_finish_dynamic_symbol #define elf_backend_finish_dynamic_sections elf_arc_finish_dynamic_sections #define elf_backend_size_dynamic_sections elf_arc_size_dynamic_sections -#define elf_backend_add_symbol_hook elf_arc_add_symbol_hook +#define elf_backend_add_symbol_hook elf_arc_add_symbol_hook #define elf_backend_can_gc_sections 1 #define elf_backend_want_got_plt 1 @@ -2670,4 +2484,6 @@ elf_arc_add_symbol_hook (bfd * abfd, #define elf_backend_may_use_rela_p 1 #define elf_backend_default_use_rela_p 1 +#define elf_backend_default_execstack 0 + #include "elf32-target.h" diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 81ebf67..834d615 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -2360,6 +2360,8 @@ enum stub_insn_type 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_MOVT(X) {(X), THUMB32_TYPE, R_ARM_THM_MOVT_ABS, 0} +#define THUMB32_MOVW(X) {(X), THUMB32_TYPE, R_ARM_THM_MOVW_ABS_NC, 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)} @@ -2402,6 +2404,22 @@ static const insn_sequence elf32_arm_stub_long_branch_thumb_only[] = DATA_WORD (0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ }; +/* Thumb -> Thumb long branch stub in thumb2 encoding. Used on armv7. */ +static const insn_sequence elf32_arm_stub_long_branch_thumb2_only[] = +{ + THUMB32_INSN (0xf85ff000), /* ldr.w pc, [pc, #-0] */ + DATA_WORD (0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(x) */ +}; + +/* Thumb -> Thumb long branch stub. Used for PureCode sections on Thumb2 + M-profile architectures. */ +static const insn_sequence elf32_arm_stub_long_branch_thumb2_only_pure[] = +{ + THUMB32_MOVW (0xf2400c00), /* mov.w ip, R_ARM_MOVW_ABS_NC */ + THUMB32_MOVT (0xf2c00c00), /* movt ip, R_ARM_MOVT_ABS << 16 */ + THUMB16_INSN (0x4760), /* bx ip */ +}; + /* V4T Thumb -> Thumb long branch stub. Using the stack is not allowed. */ static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb[] = @@ -2625,18 +2643,22 @@ static const insn_sequence elf32_arm_stub_a8_veneer_blx[] = DEF_STUB(a8_veneer_b_cond) \ DEF_STUB(a8_veneer_b) \ DEF_STUB(a8_veneer_bl) \ - DEF_STUB(a8_veneer_blx) + DEF_STUB(a8_veneer_blx) \ + DEF_STUB(long_branch_thumb2_only) \ + DEF_STUB(long_branch_thumb2_only_pure) #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 + max_stub_type }; #undef DEF_STUB +/* Note the first a8_veneer type. */ +const unsigned arm_stub_a8_veneer_lwm = arm_stub_a8_veneer_b_cond; + typedef struct { const insn_sequence* template_sequence; @@ -2666,8 +2688,12 @@ struct elf32_arm_stub_hash_entry bfd_vma target_value; asection *target_section; - /* Offset to apply to relocation referencing target_value. */ - bfd_vma target_addend; + /* Same as above but for the source of the branch to the stub. Used for + Cortex-A8 erratum workaround to patch it to branch to the stub. As + such, source section does not need to be recorded since Cortex-A8 erratum + workaround stubs are only generated when both source and target are in the + same section. */ + bfd_vma source_value; /* The instruction which caused this stub to be generated (only valid for Cortex-A8 erratum workaround stubs at present). */ @@ -2836,7 +2862,7 @@ struct a8_erratum_fix bfd *input_bfd; asection *section; bfd_vma offset; - bfd_vma addend; + bfd_vma target_offset; unsigned long orig_insn; char *stub_name; enum elf32_arm_stub_type stub_type; @@ -3158,7 +3184,8 @@ struct elf32_arm_link_hash_table bfd *stub_bfd; /* Linker call-backs. */ - asection * (*add_stub_section) (const char *, asection *, unsigned int); + asection * (*add_stub_section) (const char *, asection *, asection *, + unsigned int); void (*layout_sections_again) (void); /* Array to keep track of which stub sections have been created, and @@ -3413,9 +3440,9 @@ stub_hash_newfunc (struct bfd_hash_entry *entry, eh = (struct elf32_arm_stub_hash_entry *) entry; eh->stub_sec = NULL; eh->stub_offset = 0; + eh->source_value = 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; @@ -3513,6 +3540,11 @@ using_thumb_only (struct elf32_arm_link_hash_table *globals) arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch); + /* Force return logic to be reviewed for each new architecture. */ + BFD_ASSERT (arch <= TAG_CPU_ARCH_V8 + || arch == TAG_CPU_ARCH_V8M_BASE + || arch == TAG_CPU_ARCH_V8M_MAIN); + if (arch == TAG_CPU_ARCH_V6_M || arch == TAG_CPU_ARCH_V6S_M || arch == TAG_CPU_ARCH_V7E_M @@ -3528,9 +3560,43 @@ using_thumb_only (struct elf32_arm_link_hash_table *globals) static bfd_boolean 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; + int arch; + int thumb_isa = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, + Tag_THUMB_ISA_use); + + if (thumb_isa) + return thumb_isa == 2; + + arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch); + + /* Force return logic to be reviewed for each new architecture. */ + BFD_ASSERT (arch <= TAG_CPU_ARCH_V8 + || arch == TAG_CPU_ARCH_V8M_BASE + || arch == TAG_CPU_ARCH_V8M_MAIN); + + return (arch == TAG_CPU_ARCH_V6T2 + || arch == TAG_CPU_ARCH_V7 + || arch == TAG_CPU_ARCH_V7E_M + || arch == TAG_CPU_ARCH_V8 + || arch == TAG_CPU_ARCH_V8M_MAIN); +} + +/* Determine whether Thumb-2 BL instruction is available. */ + +static bfd_boolean +using_thumb2_bl (struct elf32_arm_link_hash_table *globals) +{ + int arch = + bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch); + + /* Force return logic to be reviewed for each new architecture. */ + BFD_ASSERT (arch <= TAG_CPU_ARCH_V8 + || arch == TAG_CPU_ARCH_V8M_BASE + || arch == TAG_CPU_ARCH_V8M_MAIN); + + /* Architecture was introduced after ARMv6T2 (eg. ARMv6-M). */ + return (arch == TAG_CPU_ARCH_V6T2 + || arch >= TAG_CPU_ARCH_V7); } /* Create .plt, .rel(a).plt, .got, .got.plt, .rel(a).got, .dynbss, and @@ -3735,19 +3801,16 @@ 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 - || arch == TAG_CPU_ARCH_V7E_M; -} -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 - || arch == TAG_CPU_ARCH_V7E_M); + /* Force return logic to be reviewed for each new architecture. */ + BFD_ASSERT (arch <= TAG_CPU_ARCH_V8 + || arch == TAG_CPU_ARCH_V8M_BASE + || arch == TAG_CPU_ARCH_V8M_MAIN); + + return (arch == TAG_CPU_ARCH_V6T2 + || arch == TAG_CPU_ARCH_V6K + || arch == TAG_CPU_ARCH_V7 + || arch == TAG_CPU_ARCH_V8); } static bfd_boolean @@ -3756,6 +3819,8 @@ 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_thumb2_only: + case arm_stub_long_branch_thumb2_only_pure: 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: @@ -3789,13 +3854,14 @@ arm_type_of_stub (struct bfd_link_info *info, bfd_signed_vma branch_offset; unsigned int r_type; struct elf32_arm_link_hash_table * globals; - int thumb2; - int thumb_only; + bfd_boolean thumb2, thumb2_bl, thumb_only; enum elf32_arm_stub_type stub_type = arm_stub_none; int use_plt = 0; enum arm_st_branch_type branch_type = *actual_branch_type; union gotplt_union *root_plt; struct arm_plt_info *arm_plt; + int arch; + int thumb2_movw; if (branch_type == ST_BRANCH_LONG) return stub_type; @@ -3805,8 +3871,13 @@ arm_type_of_stub (struct bfd_link_info *info, return stub_type; thumb_only = using_thumb_only (globals); - thumb2 = using_thumb2 (globals); + thumb2_bl = using_thumb2_bl (globals); + + arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch); + + /* True for architectures that implement the thumb2 movw instruction. */ + thumb2_movw = thumb2 || (arch == TAG_CPU_ARCH_V8M_BASE); /* Determine where the call point is. */ location = (input_sec->output_offset @@ -3872,10 +3943,10 @@ arm_type_of_stub (struct bfd_link_info *info, but only if this call is not through a PLT entry. Indeed, PLT stubs handle mode switching already. */ - if ((!thumb2 + if ((!thumb2_bl && (branch_offset > THM_MAX_FWD_BRANCH_OFFSET || (branch_offset < THM_MAX_BWD_BRANCH_OFFSET))) - || (thumb2 + || (thumb2_bl && (branch_offset > THM2_MAX_FWD_BRANCH_OFFSET || (branch_offset < THM2_MAX_BWD_BRANCH_OFFSET))) || (thumb2 @@ -3894,6 +3965,15 @@ arm_type_of_stub (struct bfd_link_info *info, /* Thumb to thumb. */ if (!thumb_only) { + if (input_sec->flags & SEC_ELF_PURECODE) + (*_bfd_error_handler) (_("%B(%s): warning: long branch " + " veneers used in section with " + "SHF_ARM_PURECODE section " + "attribute is only supported" + " for M-profile targets that " + "implement the movw " + "instruction.")); + stub_type = (bfd_link_pic (info) | globals->pic_veneer) /* PIC stubs. */ ? ((globals->use_blx @@ -3916,15 +3996,39 @@ arm_type_of_stub (struct bfd_link_info *info, } else { - stub_type = (bfd_link_pic (info) | globals->pic_veneer) - /* PIC stub. */ - ? arm_stub_long_branch_thumb_only_pic - /* non-PIC stub. */ - : arm_stub_long_branch_thumb_only; + if (thumb2_movw && (input_sec->flags & SEC_ELF_PURECODE)) + stub_type = arm_stub_long_branch_thumb2_only_pure; + else + { + if (input_sec->flags & SEC_ELF_PURECODE) + (*_bfd_error_handler) (_("%B(%s): warning: long branch " + " veneers used in section with " + "SHF_ARM_PURECODE section " + "attribute is only supported" + " for M-profile targets that " + "implement the movw " + "instruction.")); + + stub_type = (bfd_link_pic (info) | globals->pic_veneer) + /* PIC stub. */ + ? arm_stub_long_branch_thumb_only_pic + /* non-PIC stub. */ + : (thumb2 ? arm_stub_long_branch_thumb2_only + : arm_stub_long_branch_thumb_only); + } } } else { + if (input_sec->flags & SEC_ELF_PURECODE) + (*_bfd_error_handler) (_("%B(%s): warning: long branch " + " veneers used in section with " + "SHF_ARM_PURECODE section " + "attribute is only supported" + " for M-profile targets that " + "implement the movw " + "instruction.")); + /* Thumb to arm. */ if (sym_sec != NULL && sym_sec->owner != NULL @@ -3969,6 +4073,14 @@ arm_type_of_stub (struct bfd_link_info *info, || r_type == R_ARM_PLT32 || r_type == R_ARM_TLS_CALL) { + if (input_sec->flags & SEC_ELF_PURECODE) + (*_bfd_error_handler) (_("%B(%s): warning: long branch " + " veneers used in section with " + "SHF_ARM_PURECODE section " + "attribute is only supported" + " for M-profile targets that " + "implement the movw " + "instruction.")); if (branch_type == ST_BRANCH_TO_THUMB) { /* Arm to thumb. */ @@ -4129,66 +4241,155 @@ elf32_arm_get_stub_entry (const asection *input_section, 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). +/* Whether veneers of type STUB_TYPE require to be in a dedicated output + section. */ + +static bfd_boolean +arm_dedicated_stub_output_section_required (enum elf32_arm_stub_type stub_type) +{ + if (stub_type >= max_stub_type) + abort (); /* Should be unreachable. */ + + return FALSE; +} + +/* Required alignment (as a power of 2) for the dedicated section holding + veneers of type STUB_TYPE, or 0 if veneers of this type are interspersed + with input sections. */ + +static int +arm_dedicated_stub_output_section_required_alignment + (enum elf32_arm_stub_type stub_type) +{ + if (stub_type >= max_stub_type) + abort (); /* Should be unreachable. */ + + BFD_ASSERT (!arm_dedicated_stub_output_section_required (stub_type)); + return 0; +} + +/* Name of the dedicated output section to put veneers of type STUB_TYPE, or + NULL if veneers of this type are interspersed with input sections. */ + +static const char * +arm_dedicated_stub_output_section_name (enum elf32_arm_stub_type stub_type) +{ + if (stub_type >= max_stub_type) + abort (); /* Should be unreachable. */ + + BFD_ASSERT (!arm_dedicated_stub_output_section_required (stub_type)); + return NULL; +} + +/* If veneers of type STUB_TYPE should go in a dedicated output section, + returns the address of the hash table field in HTAB holding a pointer to the + corresponding input section. Otherwise, returns NULL. */ + +static asection ** +arm_dedicated_stub_input_section_ptr + (struct elf32_arm_link_hash_table *htab ATTRIBUTE_UNUSED, + enum elf32_arm_stub_type stub_type) +{ + if (stub_type >= max_stub_type) + abort (); /* Should be unreachable. */ + + BFD_ASSERT (!arm_dedicated_stub_output_section_required (stub_type)); + return NULL; +} + +/* Find or create a stub section to contain a stub of type STUB_TYPE. SECTION + is the section that branch into veneer and can be NULL if stub should go in + a dedicated output 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) + struct elf32_arm_link_hash_table *htab, + enum elf32_arm_stub_type stub_type) { - asection *link_sec; - asection *stub_sec; - - link_sec = htab->stub_group[section->id].link_sec; - BFD_ASSERT (link_sec != NULL); - stub_sec = htab->stub_group[section->id].stub_sec; + asection *link_sec, *out_sec, **stub_sec_p; + const char *stub_sec_prefix; + bfd_boolean dedicated_output_section = + arm_dedicated_stub_output_section_required (stub_type); + int align; - if (stub_sec == NULL) + if (dedicated_output_section) { - stub_sec = htab->stub_group[link_sec->id].stub_sec; - if (stub_sec == NULL) + bfd *output_bfd = htab->obfd; + const char *out_sec_name = + arm_dedicated_stub_output_section_name (stub_type); + link_sec = NULL; + stub_sec_p = arm_dedicated_stub_input_section_ptr (htab, stub_type); + stub_sec_prefix = out_sec_name; + align = arm_dedicated_stub_output_section_required_alignment (stub_type); + out_sec = bfd_get_section_by_name (output_bfd, out_sec_name); + if (out_sec == NULL) { - size_t namelen; - bfd_size_type len; - char *s_name; - - namelen = strlen (link_sec->name); - len = namelen + sizeof (STUB_SUFFIX); - s_name = (char *) 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, - htab->nacl_p ? 4 : 3); - if (stub_sec == NULL) - return NULL; - htab->stub_group[link_sec->id].stub_sec = stub_sec; + (*_bfd_error_handler) (_("No address assigned to the veneers output " + "section %s"), out_sec_name); + return NULL; } - htab->stub_group[section->id].stub_sec = stub_sec; } + else + { + link_sec = htab->stub_group[section->id].link_sec; + BFD_ASSERT (link_sec != NULL); + stub_sec_p = &htab->stub_group[section->id].stub_sec; + if (*stub_sec_p == NULL) + stub_sec_p = &htab->stub_group[link_sec->id].stub_sec; + stub_sec_prefix = link_sec->name; + out_sec = link_sec->output_section; + align = htab->nacl_p ? 4 : 3; + } + + if (*stub_sec_p == NULL) + { + size_t namelen; + bfd_size_type len; + char *s_name; + + namelen = strlen (stub_sec_prefix); + len = namelen + sizeof (STUB_SUFFIX); + s_name = (char *) bfd_alloc (htab->stub_bfd, len); + if (s_name == NULL) + return NULL; + + memcpy (s_name, stub_sec_prefix, namelen); + memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX)); + *stub_sec_p = (*htab->add_stub_section) (s_name, out_sec, link_sec, + align); + if (*stub_sec_p == NULL) + return NULL; + + out_sec->flags |= SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE + | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY + | SEC_KEEP; + } + + if (!dedicated_output_section) + htab->stub_group[section->id].stub_sec = *stub_sec_p; if (link_sec_p) *link_sec_p = link_sec; - return stub_sec; + return *stub_sec_p; } /* 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) +elf32_arm_add_stub (const char *stub_name, asection *section, + struct elf32_arm_link_hash_table *htab, + enum elf32_arm_stub_type stub_type) { 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); + stub_sec = elf32_arm_create_or_find_stub_sec (&link_sec, section, htab, + stub_type); if (stub_sec == NULL) return NULL; @@ -4197,6 +4398,8 @@ elf32_arm_add_stub (const char *stub_name, TRUE, FALSE); if (stub_entry == NULL) { + if (section == NULL) + section = stub_sec; (*_bfd_error_handler) (_("%s: cannot create stub entry %s"), section->owner, stub_name); @@ -4241,7 +4444,7 @@ put_thumb_insn (struct elf32_arm_link_hash_table * htab, static void put_thumb2_insn (struct elf32_arm_link_hash_table * htab, - bfd * output_bfd, bfd_vma val, void * ptr) + bfd * output_bfd, bfd_vma val, bfd_byte * ptr) { /* T2 instructions are 16-bit streamed. */ if (htab->byteswap_code != bfd_little_endian (output_bfd)) @@ -4302,6 +4505,8 @@ arm_stub_required_alignment (enum elf32_arm_stub_type stub_type) case arm_stub_long_branch_any_any: case arm_stub_long_branch_v4t_arm_thumb: case arm_stub_long_branch_thumb_only: + case arm_stub_long_branch_thumb2_only: + case arm_stub_long_branch_thumb2_only_pure: case arm_stub_long_branch_v4t_thumb_thumb: case arm_stub_long_branch_v4t_thumb_arm: case arm_stub_short_branch_v4t_thumb_arm: @@ -4325,6 +4530,30 @@ arm_stub_required_alignment (enum elf32_arm_stub_type stub_type) } } +/* Returns whether stubs of type STUB_TYPE take over the symbol they are + veneering (TRUE) or have their own symbol (FALSE). */ + +static bfd_boolean +arm_stub_sym_claimed (enum elf32_arm_stub_type stub_type) +{ + if (stub_type >= max_stub_type) + abort (); /* Should be unreachable. */ + + return FALSE; +} + +/* Returns the padding needed for the dedicated section used stubs of type + STUB_TYPE. */ + +static int +arm_dedicated_stub_section_padding (enum elf32_arm_stub_type stub_type) +{ + if (stub_type >= max_stub_type) + abort (); /* Should be unreachable. */ + + return 0; +} + static bfd_boolean arm_build_one_stub (struct bfd_hash_entry *gen_entry, void * in_arg) @@ -4450,65 +4679,36 @@ arm_build_one_stub (struct bfd_hash_entry *gen_entry, 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; - enum arm_st_branch_type branch_type - = (template_sequence[stub_reloc_idx[i]].r_type != R_ARM_THM_XPC22 - ? ST_BRANCH_TO_THUMB : ST_BRANCH_TO_ARM); - 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, "", STT_FUNC, - branch_type, (struct elf_link_hash_entry *) stub_entry->h, - &unresolved_reloc, &error_message); - } - else - { - Elf_Internal_Rela rel; - bfd_boolean unresolved_reloc; - char *error_message; - bfd_vma points_to = sym_value + stub_entry->target_addend - + template_sequence[stub_reloc_idx[i]].reloc_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 = 0; - - 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, "", STT_FUNC, - stub_entry->branch_type, - (struct elf_link_hash_entry *) stub_entry->h, &unresolved_reloc, - &error_message); - } + { + Elf_Internal_Rela rel; + bfd_boolean unresolved_reloc; + char *error_message; + bfd_vma points_to = + sym_value + template_sequence[stub_reloc_idx[i]].reloc_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 = 0; + + 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. We use target_section as Cortex-A8 erratum workaround stubs + are only generated when both source and target are in the same + section. */ + points_to = stub_entry->target_section->output_section->vma + + stub_entry->target_section->output_offset + + stub_entry->source_value; + + 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, "", STT_FUNC, + stub_entry->branch_type, + (struct elf_link_hash_entry *) stub_entry->h, &unresolved_reloc, + &error_message); + } return TRUE; #undef MAXRELOCS @@ -5101,7 +5301,8 @@ cortex_a8_erratum_scan (bfd *input_bfd, 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].target_offset = + target - base_vma; 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; @@ -5130,6 +5331,117 @@ cortex_a8_erratum_scan (bfd *input_bfd, return FALSE; } +/* Create or update a stub entry depending on whether the stub can already be + found in HTAB. The stub is identified by: + - its type STUB_TYPE + - its source branch (note that several can share the same stub) whose + section and relocation (if any) are given by SECTION and IRELA + respectively + - its target symbol whose input section, hash, name, value and branch type + are given in SYM_SEC, HASH, SYM_NAME, SYM_VALUE and BRANCH_TYPE + respectively + + If found, the value of the stub's target symbol is updated from SYM_VALUE + and *NEW_STUB is set to FALSE. Otherwise, *NEW_STUB is set to + TRUE and the stub entry is initialized. + + Returns whether the stub could be successfully created or updated, or FALSE + if an error occured. */ + +static bfd_boolean +elf32_arm_create_stub (struct elf32_arm_link_hash_table *htab, + enum elf32_arm_stub_type stub_type, asection *section, + Elf_Internal_Rela *irela, asection *sym_sec, + struct elf32_arm_link_hash_entry *hash, char *sym_name, + bfd_vma sym_value, enum arm_st_branch_type branch_type, + bfd_boolean *new_stub) +{ + const asection *id_sec; + char *stub_name; + struct elf32_arm_stub_hash_entry *stub_entry; + unsigned int r_type; + bfd_boolean sym_claimed = arm_stub_sym_claimed (stub_type); + + BFD_ASSERT (stub_type != arm_stub_none); + *new_stub = FALSE; + + if (sym_claimed) + stub_name = sym_name; + else + { + BFD_ASSERT (irela); + BFD_ASSERT (section); + + /* 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, + stub_type); + if (!stub_name) + return FALSE; + } + + stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, stub_name, FALSE, + FALSE); + /* The proper stub has already been created, just update its value. */ + if (stub_entry != NULL) + { + if (!sym_claimed) + free (stub_name); + stub_entry->target_value = sym_value; + return TRUE; + } + + stub_entry = elf32_arm_add_stub (stub_name, section, htab, stub_type); + if (stub_entry == NULL) + { + if (!sym_claimed) + free (stub_name); + return FALSE; + } + + stub_entry->target_value = sym_value; + stub_entry->target_section = sym_sec; + stub_entry->stub_type = stub_type; + stub_entry->h = hash; + stub_entry->branch_type = branch_type; + + if (sym_claimed) + stub_entry->output_name = sym_name; + else + { + if (sym_name == NULL) + sym_name = "unnamed"; + stub_entry->output_name = (char *) + bfd_alloc (htab->stub_bfd, sizeof (THUMB2ARM_GLUE_ENTRY_NAME) + + strlen (sym_name)); + if (stub_entry->output_name == NULL) + { + free (stub_name); + return FALSE; + } + + /* For historical reasons, use the existing names for ARM-to-Thumb and + Thumb-to-ARM stubs. */ + r_type = ELF32_R_TYPE (irela->r_info); + if ((r_type == (unsigned int) R_ARM_THM_CALL + || r_type == (unsigned int) R_ARM_THM_JUMP24 + || r_type == (unsigned int) R_ARM_THM_JUMP19) + && branch_type == ST_BRANCH_TO_ARM) + 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) + && branch_type == ST_BRANCH_TO_THUMB) + sprintf (stub_entry->output_name, ARM2THUMB_GLUE_ENTRY_NAME, sym_name); + else + sprintf (stub_entry->output_name, STUB_ENTRY_NAME, sym_name); + } + + *new_stub = TRUE; + return TRUE; +} + /* 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 @@ -5142,6 +5454,7 @@ elf32_arm_size_stubs (bfd *output_bfd, struct bfd_link_info *info, bfd_signed_vma group_size, asection * (*add_stub_section) (const char *, asection *, + asection *, unsigned int), void (*layout_sections_again) (void)) { @@ -5217,6 +5530,7 @@ elf32_arm_size_stubs (bfd *output_bfd, bfd *input_bfd; unsigned int bfd_indx; asection *stub_sec; + enum elf32_arm_stub_type stub_type; bfd_boolean stub_changed = FALSE; unsigned prev_num_a8_fixes = num_a8_fixes; @@ -5272,15 +5586,11 @@ elf32_arm_size_stubs (bfd *output_bfd, 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; enum arm_st_branch_type branch_type; bfd_boolean created_stub = FALSE; @@ -5294,7 +5604,13 @@ elf32_arm_size_stubs (bfd *output_bfd, error_ret_free_internal: if (elf_section_data (section)->relocs == NULL) free (internal_relocs); - goto error_ret_free_local; + /* Fall through. */ + error_ret_free_local: + if (local_syms != NULL + && (symtab_hdr->contents + != (unsigned char *) local_syms)) + free (local_syms); + return FALSE; } hash = NULL; @@ -5382,7 +5698,8 @@ elf32_arm_size_stubs (bfd *output_bfd, + sym_sec->output_offset + sym_sec->output_section->vma); st_type = ELF_ST_TYPE (sym->st_info); - branch_type = ARM_SYM_BRANCH_TYPE (sym); + branch_type = + ARM_GET_SYM_BRANCH_TYPE (sym->st_target_internal); sym_name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link, @@ -5457,12 +5774,15 @@ elf32_arm_size_stubs (bfd *output_bfd, goto error_ret_free_internal; } st_type = hash->root.type; - branch_type = hash->root.target_internal; + branch_type = + ARM_GET_SYM_BRANCH_TYPE (hash->root.target_internal); sym_name = hash->root.root.root.string; } do { + bfd_boolean new_stub; + /* Determine what (if any) linker stub is needed. */ stub_type = arm_type_of_stub (info, section, irela, st_type, &branch_type, @@ -5471,74 +5791,20 @@ elf32_arm_size_stubs (bfd *output_bfd, 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, stub_type); - 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->branch_type = branch_type; - - if (sym_name == NULL) - sym_name = "unnamed"; - stub_entry->output_name = (char *) - 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; - } + created_stub = + elf32_arm_create_stub (htab, stub_type, section, irela, + sym_sec, hash, + (char *) sym_name, sym_value, + branch_type, &new_stub); - /* 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 - || r_type == (unsigned int) R_ARM_THM_JUMP19) - && branch_type == ST_BRANCH_TO_ARM) - 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) - && branch_type == ST_BRANCH_TO_THUMB) - sprintf (stub_entry->output_name, - ARM2THUMB_GLUE_ENTRY_NAME, sym_name); + if (!created_stub) + goto error_ret_free_internal; + else if (!new_stub) + break; else - sprintf (stub_entry->output_name, STUB_ENTRY_NAME, - sym_name); - - stub_changed = TRUE; + stub_changed = TRUE; } while (0); @@ -5603,6 +5869,15 @@ elf32_arm_size_stubs (bfd *output_bfd, != 0) goto error_ret_free_local; } + + if (local_syms != NULL + && symtab_hdr->contents != (unsigned char *) local_syms) + { + if (!info->keep_memory) + free (local_syms); + else + symtab_hdr->contents = (unsigned char *) local_syms; + } } if (prev_num_a8_fixes != num_a8_fixes) @@ -5624,17 +5899,37 @@ elf32_arm_size_stubs (bfd *output_bfd, stub_sec->size = 0; } + /* Compute stub section size, considering padding. */ bfd_hash_traverse (&htab->stub_hash_table, arm_size_one_stub, htab); + for (stub_type = arm_stub_none + 1; stub_type < max_stub_type; + stub_type++) + { + int size, padding; + asection **stub_sec_p; + + padding = arm_dedicated_stub_section_padding (stub_type); + stub_sec_p = arm_dedicated_stub_input_section_ptr (htab, stub_type); + /* Skip if no stub input section or no stub section padding + required. */ + if ((stub_sec_p != NULL && *stub_sec_p == NULL) || padding == 0) + continue; + /* Stub section padding required but no dedicated section. */ + BFD_ASSERT (stub_sec_p); + + size = (*stub_sec_p)->size; + size = (size + padding - 1) & ~(padding - 1); + (*stub_sec_p)->size = size; + } /* 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); + a8_fixes[i].section, htab, a8_fixes[i].stub_type); if (stub_sec == NULL) - goto error_ret_free_local; + return FALSE; stub_sec->size += find_stub_size_and_template (a8_fixes[i].stub_type, NULL, @@ -5674,9 +5969,9 @@ elf32_arm_size_stubs (bfd *output_bfd, stub_entry->stub_offset = 0; stub_entry->id_sec = link_sec; stub_entry->stub_type = a8_fixes[i].stub_type; + stub_entry->source_value = a8_fixes[i].offset; 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->target_value = a8_fixes[i].target_offset; stub_entry->orig_insn = a8_fixes[i].orig_insn; stub_entry->branch_type = a8_fixes[i].branch_type; @@ -5700,9 +5995,6 @@ elf32_arm_size_stubs (bfd *output_bfd, 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 @@ -5732,7 +6024,8 @@ elf32_arm_build_stubs (struct bfd_link_info *info) if (!strstr (stub_sec->name, STUB_SUFFIX)) continue; - /* Allocate memory to hold the linker stubs. */ + /* Allocate memory to hold the linker stubs. Zeroing the stub sections + must at least be done for stub section requiring padding. */ size = stub_sec->size; stub_sec->contents = (unsigned char *) bfd_zalloc (htab->stub_bfd, size); if (stub_sec->contents == NULL && size != 0) @@ -6425,6 +6718,37 @@ bfd_elf32_arm_add_glue_sections_to_bfd (bfd *abfd, && arm_make_glue_section (abfd, STM32L4XX_ERRATUM_VENEER_SECTION_NAME); } +/* Mark output sections of veneers needing a dedicated one with SEC_KEEP. This + ensures they are not marked for deletion by + strip_excluded_output_sections () when veneers are going to be created + later. Not doing so would trigger assert on empty section size in + lang_size_sections_1 (). */ + +void +bfd_elf32_arm_keep_private_stub_output_sections (struct bfd_link_info *info) +{ + enum elf32_arm_stub_type stub_type; + + /* If we are only performing a partial + link do not bother adding the glue. */ + if (bfd_link_relocatable (info)) + return; + + for (stub_type = arm_stub_none + 1; stub_type < max_stub_type; stub_type++) + { + asection *out_sec; + const char *out_sec_name; + + if (!arm_dedicated_stub_output_section_required (stub_type)) + continue; + + out_sec_name = arm_dedicated_stub_output_section_name (stub_type); + out_sec = bfd_get_section_by_name (info->output_bfd, out_sec_name); + if (out_sec != NULL) + out_sec->flags |= SEC_KEEP; + } +} + /* 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. */ @@ -6601,7 +6925,8 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd, /* 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 (h->target_internal == ST_BRANCH_TO_THUMB) + if (ARM_GET_SYM_BRANCH_TYPE (h->target_internal) + == ST_BRANCH_TO_THUMB) record_arm_to_thumb_glue (link_info, h); break; @@ -7439,18 +7764,21 @@ is_thumb2_vldm (const insn32 insn) { /* A6.5 Extension register load or store instruction A7.7.229 - We look only for the 32-bit registers case since the DP (64-bit - registers) are not supported for STM32L4XX + We look for SP 32-bit and DP 64-bit registers. + Encoding T1 VLDM{mode} {!}, + is consecutive 64-bit registers + 1110 - 110P - UDW1 - rrrr - vvvv - 1011 - iiii - iiii Encoding T2 VLDM{mode} {!}, is consecutive 32-bit registers 1110 - 110P - UDW1 - rrrr - vvvv - 1010 - iiii - iiii if P==0 && U==1 && W==1 && Rn=1101 VPOP if PUW=010 || PUW=011 || PUW=101 VLDM. */ return - ((insn & 0xfe100f00) == 0xec100a00) + (((insn & 0xfe100f00) == 0xec100b00) || + ((insn & 0xfe100f00) == 0xec100a00)) && /* (IA without !). */ (((((insn << 7) >> 28) & 0xd) == 0x4) - /* (IA with !), includes VPOP (when reg number is SP). */ + /* (IA with !), includes VPOP (when reg number is SP). */ || ((((insn << 7) >> 28) & 0xd) == 0x5) /* (DB with !). */ || ((((insn << 7) >> 28) & 0xd) == 0x9)); @@ -7467,19 +7795,19 @@ static bfd_boolean stm32l4xx_need_create_replacing_stub (const insn32 insn, bfd_arm_stm32l4xx_fix stm32l4xx_fix) { - int nb_regs = 0; + int nb_words = 0; /* The field encoding the register list is the same for both LDMIA and LDMDB encodings. */ if (is_thumb2_ldmia (insn) || is_thumb2_ldmdb (insn)) - nb_regs = popcount (insn & 0x0000ffff); + nb_words = popcount (insn & 0x0000ffff); else if (is_thumb2_vldm (insn)) - nb_regs = (insn & 0xff); + nb_words = (insn & 0xff); /* DEFAULT mode accounts for the real bug condition situation, ALL mode inserts stubs for each LDM/VLDM instruction (testing). */ return - (stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_DEFAULT) ? nb_regs > 8 : + (stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_DEFAULT) ? nb_words > 8 : (stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_ALL) ? TRUE : FALSE; } @@ -8766,7 +9094,7 @@ elf32_arm_tls_relax (struct elf32_arm_link_hash_table *globals, if (!is_local) /* add r0,pc; ldr r0, [r0] */ insn = 0x44786800; - else if (arch_has_thumb2_nop (globals)) + else if (using_thumb2 (globals)) /* nop.w */ insn = 0xf3af8000; else @@ -9588,6 +9916,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, bfd_signed_vma signed_check; int bitsize; const int thumb2 = using_thumb2 (globals); + const int thumb2_bl = using_thumb2_bl (globals); /* A branch to an undefined weak symbol is turned into a jump to the next instruction unless a PLT entry will be created. @@ -9596,7 +9925,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, if (h && h->root.type == bfd_link_hash_undefweak && plt_offset == (bfd_vma) -1) { - if (arch_has_thumb2_nop (globals)) + if (thumb2) { bfd_put_16 (input_bfd, 0xf3af, hit_data); bfd_put_16 (input_bfd, 0x8000, hit_data + 2); @@ -9764,7 +10093,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, this relocation according to whether we're relocating for Thumb-2 or not. */ bitsize = howto->bitsize; - if (!thumb2) + if (!thumb2_bl) bitsize -= 2; reloc_signed_max = (1 << (bitsize - 1)) - 1; reloc_signed_min = ~reloc_signed_max; @@ -11288,14 +11617,11 @@ elf32_arm_relocate_section (bfd * output_bfd, && r_symndx != STN_UNDEF && 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; - } + (*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); if (globals->use_rel) { @@ -11459,28 +11785,34 @@ elf32_arm_relocate_section (bfd * output_bfd, and we won't let anybody mess with it. Also, we have to do addend adjustments in case of a R_ARM_TLS_GOTDESC relocation both in relaxed and non-relaxed cases. */ - if ((elf32_arm_tls_transition (info, r_type, h) != (unsigned)r_type) - || (IS_ARM_TLS_GNU_RELOC (r_type) - && !((h ? elf32_arm_hash_entry (h)->tls_type : - elf32_arm_local_got_tls_type (input_bfd)[r_symndx]) - & GOT_TLS_GDESC))) - { - r = elf32_arm_tls_relax (globals, input_bfd, input_section, - contents, rel, h == NULL); - /* This may have been marked unresolved because it came from - a shared library. But we've just dealt with that. */ - unresolved_reloc = 0; - } - else - r = bfd_reloc_continue; + if ((elf32_arm_tls_transition (info, r_type, h) != (unsigned)r_type) + || (IS_ARM_TLS_GNU_RELOC (r_type) + && !((h ? elf32_arm_hash_entry (h)->tls_type : + elf32_arm_local_got_tls_type (input_bfd)[r_symndx]) + & GOT_TLS_GDESC))) + { + r = elf32_arm_tls_relax (globals, input_bfd, input_section, + contents, rel, h == NULL); + /* This may have been marked unresolved because it came from + a shared library. But we've just dealt with that. */ + unresolved_reloc = 0; + } + else + r = bfd_reloc_continue; - if (r == bfd_reloc_continue) - r = elf32_arm_final_link_relocate (howto, input_bfd, output_bfd, - input_section, contents, rel, - relocation, info, sec, name, sym_type, - (h ? h->target_internal - : ARM_SYM_BRANCH_TYPE (sym)), h, - &unresolved_reloc, &error_message); + if (r == bfd_reloc_continue) + { + unsigned char branch_type = + h ? ARM_GET_SYM_BRANCH_TYPE (h->target_internal) + : ARM_GET_SYM_BRANCH_TYPE (sym->st_target_internal); + + r = elf32_arm_final_link_relocate (howto, input_bfd, output_bfd, + input_section, contents, rel, + relocation, info, sec, name, + sym_type, branch_type, h, + &unresolved_reloc, + &error_message); + } /* Dynamic relocs are not propagated for SEC_DEBUGGING sections because such sections are not SEC_ALLOC and thus ld.so will @@ -11509,20 +11841,15 @@ elf32_arm_relocate_section (bfd * output_bfd, /* 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; + 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); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -11543,10 +11870,8 @@ elf32_arm_relocate_section (bfd * output_bfd, common_error: BFD_ASSERT (error_message != NULL); - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, rel->r_offset); break; } } @@ -12731,6 +13056,31 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) } } break; + + case Tag_DSP_extension: + /* No need to change output value if any of: + - pre (<=) ARMv5T input architecture (do not have DSP) + - M input profile not ARMv7E-M and do not have DSP. */ + if (in_attr[Tag_CPU_arch].i <= 3 + || (in_attr[Tag_CPU_arch_profile].i == 'M' + && in_attr[Tag_CPU_arch].i != 13 + && in_attr[i].i == 0)) + ; /* Do nothing. */ + /* Output value should be 0 if DSP part of architecture, ie. + - post (>=) ARMv5te architecture output + - A, R or S profile output or ARMv7E-M output architecture. */ + else if (out_attr[Tag_CPU_arch].i >= 4 + && (out_attr[Tag_CPU_arch_profile].i == 'A' + || out_attr[Tag_CPU_arch_profile].i == 'R' + || out_attr[Tag_CPU_arch_profile].i == 'S' + || out_attr[Tag_CPU_arch].i == 13)) + out_attr[i].i = 0; + /* Otherwise, DSP instructions are added and not part of output + architecture. */ + else + out_attr[i].i = 1; + break; + case Tag_FP_arch: { /* Tag_ABI_HardFP_use is handled along with Tag_FP_arch since @@ -14109,11 +14459,13 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info, s = bfd_get_linker_section (dynobj, ".dynbss"); BFD_ASSERT (s != NULL); - /* We must generate a R_ARM_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 + /* If allowed, we must generate a R_ARM_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 .rel(a).bss section we are going to use. */ - if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0) + if (info->nocopyreloc == 0 + && (h->root.u.def.section->flags & SEC_ALLOC) != 0 + && h->size != 0) { asection *srel; @@ -14196,7 +14548,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) /* Make sure the function is not marked as Thumb, in case it is the target of an ABS32 relocation, which will point to the PLT entry. */ - h->target_internal = ST_BRANCH_TO_ARM; + ARM_SET_SYM_BRANCH_TYPE (h->target_internal, ST_BRANCH_TO_ARM); } /* VxWorks executables have a second set of relocations for @@ -14344,7 +14696,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) /* Allocate stubs for exported Thumb functions on v4t. */ if (!htab->use_blx && h->dynindx != -1 && h->def_regular - && h->target_internal == ST_BRANCH_TO_THUMB + && ARM_GET_SYM_BRANCH_TYPE (h->target_internal) == ST_BRANCH_TO_THUMB && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) { struct elf_link_hash_entry * th; @@ -14364,12 +14716,12 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) myh = (struct elf_link_hash_entry *) bh; myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC); myh->forced_local = 1; - myh->target_internal = ST_BRANCH_TO_THUMB; + ARM_SET_SYM_BRANCH_TYPE (myh->target_internal, ST_BRANCH_TO_THUMB); eh->export_glue = myh; th = record_arm_to_thumb_glue (info, h); /* Point the symbol at the stub. */ h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC); - h->target_internal = ST_BRANCH_TO_ARM; + ARM_SET_SYM_BRANCH_TYPE (h->target_internal, ST_BRANCH_TO_ARM); h->root.u.def.section = th->root.u.def.section; h->root.u.def.value = th->root.u.def.value & ~1; } @@ -15024,7 +15376,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, /* At least one non-call relocation references this .iplt entry, so the .iplt entry is the function's canonical address. */ sym->st_info = ELF_ST_INFO (ELF_ST_BIND (sym->st_info), STT_FUNC); - sym->st_target_internal = ST_BRANCH_TO_ARM; + ARM_SET_SYM_BRANCH_TYPE (sym->st_target_internal, ST_BRANCH_TO_ARM); sym->st_shndx = (_bfd_elf_section_from_bfd_section (output_bfd, htab->root.iplt->output_section)); sym->st_value = (h->plt.offset @@ -15187,27 +15539,26 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info goto get_vma_if_bpabi; case DT_PLTGOT: - name = ".got"; + name = htab->symbian_p ? ".got" : ".got.plt"; goto get_vma; case DT_JMPREL: name = RELOC_SECTION (htab, ".plt"); get_vma: - s = bfd_get_section_by_name (output_bfd, name); + s = bfd_get_linker_section (dynobj, name); if (s == NULL) { - /* PR ld/14397: Issue an error message if a required section is missing. */ (*_bfd_error_handler) - (_("error: required section '%s' not found in the linker script"), name); + (_("could not find section %s"), name); bfd_set_error (bfd_error_invalid_operation); return FALSE; } if (!htab->symbian_p) - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; else /* In the BPABI, tags in the PT_DYNAMIC section point at the file offset, not the memory address, for the convenience of the post linker. */ - dyn.d_un.d_ptr = s->filepos; + dyn.d_un.d_ptr = s->output_section->filepos + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -15308,7 +15659,9 @@ 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 != NULL && eh->target_internal == ST_BRANCH_TO_THUMB) + if (eh != NULL + && ARM_GET_SYM_BRANCH_TYPE (eh->target_internal) + == ST_BRANCH_TO_THUMB) { dyn.d_un.d_val |= 1; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); @@ -15520,7 +15873,7 @@ elf32_arm_post_process_headers (bfd * abfd, struct bfd_link_info * link_info ATT } /* Scan segment to set p_flags attribute if it contains only sections with - SHF_ARM_NOREAD flag. */ + SHF_ARM_PURECODE flag. */ for (m = elf_seg_map (abfd); m != NULL; m = m->next) { unsigned int j; @@ -15529,7 +15882,7 @@ elf32_arm_post_process_headers (bfd * abfd, struct bfd_link_info * link_info ATT continue; for (j = 0; j < m->count; j++) { - if (!(elf_section_flags (m->sections[j]) & SHF_ARM_NOREAD)) + if (!(elf_section_flags (m->sections[j]) & SHF_ARM_PURECODE)) break; } if (j == m->count) @@ -15592,8 +15945,8 @@ elf32_arm_fake_sections (bfd * abfd, Elf_Internal_Shdr * hdr, asection * sec) hdr->sh_flags |= SHF_LINK_ORDER; } - if (sec->flags & SEC_ELF_NOREAD) - hdr->sh_flags |= SHF_ARM_NOREAD; + if (sec->flags & SEC_ELF_PURECODE) + hdr->sh_flags |= SHF_ARM_PURECODE; return TRUE; } @@ -15792,6 +16145,20 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) &h->plt, &eh->plt); } +/* Bind a veneered symbol to its veneer identified by its hash entry + STUB_ENTRY. The veneered location thus loose its symbol. */ + +static void +arm_stub_claim_sym (struct elf32_arm_stub_hash_entry *stub_entry) +{ + struct elf32_arm_link_hash_entry *hash = stub_entry->h; + + BFD_ASSERT (hash); + hash->root.root.u.def.section = stub_entry->stub_sec; + hash->root.root.u.def.value = stub_entry->stub_offset; + hash->root.size = stub_entry->stub_size; +} + /* Output a single local symbol for a generated stub. */ static bfd_boolean @@ -15838,24 +16205,30 @@ arm_map_one_stub (struct bfd_hash_entry * gen_entry, 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) + + if (arm_stub_sym_claimed (stub_entry->stub_type)) + arm_stub_claim_sym (stub_entry); + else { - 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; + stub_name = stub_entry->output_name; + 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; @@ -16244,7 +16617,7 @@ make_branch_to_a8_stub (struct bfd_hash_entry *gen_entry, bfd_vma veneered_insn_loc, veneer_entry_loc; bfd_signed_vma branch_offset; bfd *abfd; - unsigned int target; + unsigned int loc; stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry; data = (struct a8_branch_to_stub_data *) in_arg; @@ -16255,9 +16628,11 @@ make_branch_to_a8_stub (struct bfd_hash_entry *gen_entry, contents = data->contents; + /* We use target_section as Cortex-A8 erratum workaround stubs are only + generated when both source and target are in the same section. */ veneered_insn_loc = stub_entry->target_section->output_section->vma + stub_entry->target_section->output_offset - + stub_entry->target_value; + + stub_entry->source_value; veneer_entry_loc = stub_entry->stub_sec->output_section->vma + stub_entry->stub_sec->output_offset @@ -16269,7 +16644,7 @@ make_branch_to_a8_stub (struct bfd_hash_entry *gen_entry, branch_offset = veneer_entry_loc - veneered_insn_loc - 4; abfd = stub_entry->target_section->owner; - target = stub_entry->target_value; + loc = stub_entry->source_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. @@ -16330,8 +16705,8 @@ make_branch_to_a8_stub (struct bfd_hash_entry *gen_entry, return FALSE; } - bfd_put_16 (abfd, (branch_insn >> 16) & 0xffff, &contents[target]); - bfd_put_16 (abfd, branch_insn & 0xffff, &contents[target + 2]); + bfd_put_16 (abfd, (branch_insn >> 16) & 0xffff, &contents[loc]); + bfd_put_16 (abfd, branch_insn & 0xffff, &contents[loc + 2]); return TRUE; } @@ -16427,30 +16802,31 @@ create_instruction_sub (int target_reg, int source_reg, int value) } static inline bfd_vma -create_instruction_vldmia (int base_reg, int wback, int num_regs, +create_instruction_vldmia (int base_reg, int is_dp, int wback, int num_words, int first_reg) { /* A8.8.332 VLDM (A8-922) - VLMD{MODE} Rn{!}, {list} (Encoding T2). */ - bfd_vma patched_inst = 0xec900a00 + VLMD{MODE} Rn{!}, {list} (Encoding T1 or T2). */ + bfd_vma patched_inst = (is_dp ? 0xec900b00 : 0xec900a00) | (/*W=*/wback << 21) | (base_reg << 16) - | (num_regs & 0x000000ff) - | (((unsigned)first_reg>>1) & 0x0000000f) << 12 + | (num_words & 0x000000ff) + | (((unsigned)first_reg >> 1) & 0x0000000f) << 12 | (first_reg & 0x00000001) << 22; return patched_inst; } static inline bfd_vma -create_instruction_vldmdb (int base_reg, int num_regs, int first_reg) +create_instruction_vldmdb (int base_reg, int is_dp, int num_words, + int first_reg) { /* A8.8.332 VLDM (A8-922) - VLMD{MODE} Rn!, {} (Encoding T2). */ - bfd_vma patched_inst = 0xed300a00 + VLMD{MODE} Rn!, {} (Encoding T1 or T2). */ + bfd_vma patched_inst = (is_dp ? 0xed300b00 : 0xed300a00) | (base_reg << 16) - | (num_regs & 0x000000ff) - | (((unsigned)first_reg>>1) & 0x0000000f) << 12 + | (num_words & 0x000000ff) + | (((unsigned)first_reg >>1 ) & 0x0000000f) << 12 | (first_reg & 0x00000001) << 22; return patched_inst; @@ -16930,15 +17306,15 @@ stm32l4xx_create_replacing_stub_vldm (struct elf32_arm_link_hash_table * htab, const bfd_byte *const initial_insn_addr, bfd_byte *const base_stub_contents) { - int num_regs = ((unsigned int)initial_insn << 24) >> 24; + int num_words = ((unsigned int) initial_insn << 24) >> 24; bfd_byte *current_stub_contents = base_stub_contents; BFD_ASSERT (is_thumb2_vldm (initial_insn)); /* In BFD_ARM_STM32L4XX_FIX_ALL mode we may have to deal with - smaller than 8 registers load sequences that do not cause the + smaller than 8 words load sequences that do not cause the hardware issue. */ - if (num_regs <= 8) + if (num_words <= 8) { /* Untouched instruction. */ current_stub_contents = @@ -16953,28 +17329,30 @@ stm32l4xx_create_replacing_stub_vldm (struct elf32_arm_link_hash_table * htab, } else { + bfd_boolean is_dp = /* DP encoding. */ + (initial_insn & 0xfe100f00) == 0xec100b00; bfd_boolean is_ia_nobang = /* (IA without !). */ (((initial_insn << 7) >> 28) & 0xd) == 0x4; bfd_boolean is_ia_bang = /* (IA with !) - includes VPOP. */ (((initial_insn << 7) >> 28) & 0xd) == 0x5; bfd_boolean is_db_bang = /* (DB with !). */ (((initial_insn << 7) >> 28) & 0xd) == 0x9; - int base_reg = ((unsigned int)initial_insn << 12) >> 28; + int base_reg = ((unsigned int) initial_insn << 12) >> 28; /* d = UInt (Vd:D);. */ - int first_reg = ((((unsigned int)initial_insn << 16) >> 28) << 1) + int first_reg = ((((unsigned int) initial_insn << 16) >> 28) << 1) | (((unsigned int)initial_insn << 9) >> 31); - /* Compute the number of 8-register chunks needed to split. */ - int chunks = (num_regs%8) ? (num_regs/8 + 1) : (num_regs/8); + /* Compute the number of 8-words chunks needed to split. */ + int chunks = (num_words % 8) ? (num_words / 8 + 1) : (num_words / 8); int chunk; /* The test coverage has been done assuming the following hypothesis that exactly one of the previous is_ predicates is true. */ - BFD_ASSERT ((is_ia_nobang ^ is_ia_bang ^ is_db_bang) && - !(is_ia_nobang & is_ia_bang & is_db_bang)); + BFD_ASSERT ( (is_ia_nobang ^ is_ia_bang ^ is_db_bang) + && !(is_ia_nobang & is_ia_bang & is_db_bang)); - /* We treat the cutting of the register in one pass for all + /* We treat the cutting of the words in one pass for all cases, then we emit the adjustments: vldm rx, {...} @@ -16987,29 +17365,34 @@ stm32l4xx_create_replacing_stub_vldm (struct elf32_arm_link_hash_table * htab, vldmd rx!, {...} -> vldmb rx!, {8_words_or_less} for each needed 8_word. */ - for (chunk = 0; chunkst_target_internal = 0; /* New EABI objects mark thumb function symbols by setting the low bit of the address. */ @@ -17483,20 +17867,21 @@ elf32_arm_swap_symbol_in (bfd * abfd, if (dst->st_value & 1) { dst->st_value &= ~(bfd_vma) 1; - dst->st_target_internal = ST_BRANCH_TO_THUMB; + ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, + ST_BRANCH_TO_THUMB); } else - dst->st_target_internal = ST_BRANCH_TO_ARM; + ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_TO_ARM); } else if (ELF_ST_TYPE (dst->st_info) == STT_ARM_TFUNC) { dst->st_info = ELF_ST_INFO (ELF_ST_BIND (dst->st_info), STT_FUNC); - dst->st_target_internal = ST_BRANCH_TO_THUMB; + ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_TO_THUMB); } else if (ELF_ST_TYPE (dst->st_info) == STT_SECTION) - dst->st_target_internal = ST_BRANCH_LONG; + ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_LONG); else - dst->st_target_internal = ST_BRANCH_UNKNOWN; + ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_UNKNOWN); return TRUE; } @@ -17516,7 +17901,7 @@ elf32_arm_swap_symbol_out (bfd *abfd, of the address set, as per the new EABI. We do this unconditionally because objcopy does not set the elf header flags until after it writes out the symbol table. */ - if (src->st_target_internal == ST_BRANCH_TO_THUMB) + if (ARM_GET_SYM_BRANCH_TYPE (src->st_target_internal) == ST_BRANCH_TO_THUMB) { newsym = *src; if (ELF_ST_TYPE (src->st_info) != STT_GNU_IFUNC) @@ -17598,11 +17983,10 @@ elf32_arm_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, Elf_Internal_Sym *sym, const char **namep, flagword *flagsp, asection **secp, bfd_vma *valp) { - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; if (elf32_arm_hash_table (info) == NULL) return FALSE; @@ -17848,16 +18232,16 @@ elf32_arm_get_synthetic_symtab (bfd *abfd, static bfd_boolean elf32_arm_section_flags (flagword *flags, const Elf_Internal_Shdr * hdr) { - if (hdr->sh_flags & SHF_ARM_NOREAD) - *flags |= SEC_ELF_NOREAD; + if (hdr->sh_flags & SHF_ARM_PURECODE) + *flags |= SEC_ELF_PURECODE; return TRUE; } static flagword elf32_arm_lookup_section_flags (char *flag_name) { - if (!strcmp (flag_name, "SHF_ARM_NOREAD")) - return SHF_ARM_NOREAD; + if (!strcmp (flag_name, "SHF_ARM_PURECODE")) + return SHF_ARM_PURECODE; return SEC_NO_FLAGS; } @@ -17870,6 +18254,137 @@ elf32_arm_count_additional_relocs (asection *sec) return arm_data->additional_reloc_count; } +/* Called to set the sh_flags, sh_link and sh_info fields of OSECTION which + has a type >= SHT_LOOS. Returns TRUE if these fields were initialised + FALSE otherwise. ISECTION is the best guess matching section from the + input bfd IBFD, but it might be NULL. */ + +static bfd_boolean +elf32_arm_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED, + Elf_Internal_Shdr *osection) +{ + switch (osection->sh_type) + { + case SHT_ARM_EXIDX: + { + Elf_Internal_Shdr **oheaders = elf_elfsections (obfd); + Elf_Internal_Shdr **iheaders = elf_elfsections (ibfd); + unsigned i = 0; + + osection->sh_flags = SHF_ALLOC | SHF_LINK_ORDER; + osection->sh_info = 0; + + /* The sh_link field must be set to the text section associated with + this index section. Unfortunately the ARM EHABI does not specify + exactly how to determine this association. Our caller does try + to match up OSECTION with its corresponding input section however + so that is a good first guess. */ + if (isection != NULL + && osection->bfd_section != NULL + && isection->bfd_section != NULL + && isection->bfd_section->output_section != NULL + && isection->bfd_section->output_section == osection->bfd_section + && iheaders != NULL + && isection->sh_link > 0 + && isection->sh_link < elf_numsections (ibfd) + && iheaders[isection->sh_link]->bfd_section != NULL + && iheaders[isection->sh_link]->bfd_section->output_section != NULL + ) + { + for (i = elf_numsections (obfd); i-- > 0;) + if (oheaders[i]->bfd_section + == iheaders[isection->sh_link]->bfd_section->output_section) + break; + } + + if (i == 0) + { + /* Failing that we have to find a matching section ourselves. If + we had the output section name available we could compare that + with input section names. Unfortunately we don't. So instead + we use a simple heuristic and look for the nearest executable + section before this one. */ + for (i = elf_numsections (obfd); i-- > 0;) + if (oheaders[i] == osection) + break; + if (i == 0) + break; + + while (i-- > 0) + if (oheaders[i]->sh_type == SHT_PROGBITS + && (oheaders[i]->sh_flags & (SHF_ALLOC | SHF_EXECINSTR)) + == (SHF_ALLOC | SHF_EXECINSTR)) + break; + } + + if (i) + { + osection->sh_link = i; + /* If the text section was part of a group + then the index section should be too. */ + if (oheaders[i]->sh_flags & SHF_GROUP) + osection->sh_flags |= SHF_GROUP; + return TRUE; + } + } + break; + + case SHT_ARM_PREEMPTMAP: + osection->sh_flags = SHF_ALLOC; + break; + + case SHT_ARM_ATTRIBUTES: + case SHT_ARM_DEBUGOVERLAY: + case SHT_ARM_OVERLAYSECTION: + default: + break; + } + + return FALSE; +} + +/* Returns TRUE if NAME is an ARM mapping symbol. + Traditionally the symbols $a, $d and $t have been used. + The ARM ELF standard also defines $x (for A64 code). It also allows a + period initiated suffix to be added to the symbol: "$[adtx]\.[:sym_char]+". + Other tools might also produce $b (Thumb BL), $f, $p, $m and $v, but we do + not support them here. $t.x indicates the start of ThumbEE instructions. */ + +static bfd_boolean +is_arm_mapping_symbol (const char * name) +{ + return name != NULL /* Paranoia. */ + && name[0] == '$' /* Note: if objcopy --prefix-symbols has been used then + the mapping symbols could have acquired a prefix. + We do not support this here, since such symbols no + longer conform to the ARM ELF ABI. */ + && (name[1] == 'a' || name[1] == 'd' || name[1] == 't' || name[1] == 'x') + && (name[2] == 0 || name[2] == '.'); + /* FIXME: Strictly speaking the symbol is only a valid mapping symbol if + any characters that follow the period are legal characters for the body + of a symbol's name. For now we just assume that this is the case. */ +} + +/* Make sure that mapping symbols in object files are not removed via the + "strip --strip-unneeded" tool. These symbols are needed in order to + correctly generate interworking veneers, and for byte swapping code + regions. Once an object file has been linked, it is safe to remove the + symbols as they will no longer be needed. */ + +static void +elf32_arm_backend_symbol_processing (bfd *abfd, asymbol *sym) +{ + if (((abfd->flags & (EXEC_P | DYNAMIC)) == 0) + && sym->section != bfd_abs_section_ptr + && is_arm_mapping_symbol (sym->name)) + sym->flags |= BSF_KEEP; +} + +#undef elf_backend_copy_special_section_fields +#define elf_backend_copy_special_section_fields elf32_arm_copy_special_section_fields + #define ELF_ARCH bfd_arch_arm #define ELF_TARGET_ID ARM_ELF_DATA #define ELF_MACHINE_CODE EM_ARM @@ -17925,6 +18440,7 @@ elf32_arm_count_additional_relocs (asection *sec) #define elf_backend_begin_write_processing elf32_arm_begin_write_processing #define elf_backend_add_symbol_hook elf32_arm_add_symbol_hook #define elf_backend_count_additional_relocs elf32_arm_count_additional_relocs +#define elf_backend_symbol_processing elf32_arm_backend_symbol_processing #define elf_backend_can_refcount 1 #define elf_backend_can_gc_sections 1 @@ -18032,6 +18548,7 @@ elf32_arm_nacl_plt_sym_val (bfd_vma i, const asection *plt, #undef bfd_elf32_get_synthetic_symtab #undef elf_backend_plt_sym_val #define elf_backend_plt_sym_val elf32_arm_nacl_plt_sym_val +#undef elf_backend_copy_special_section_fields #undef ELF_MINPAGESIZE #undef ELF_COMMONPAGESIZE @@ -18451,7 +18968,6 @@ elf32_arm_symbian_plt_sym_val (bfd_vma i, const asection *plt, return plt->vma + 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry) * i; } - #undef elf32_bed #define elf32_bed elf32_arm_symbian_bed diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index 91994f0..a0a5c69 100644 --- a/bfd/elf32-avr.c +++ b/bfd/elf32-avr.c @@ -1487,14 +1487,13 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, 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); + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -1516,11 +1515,8 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } @@ -1826,12 +1822,13 @@ elf32_avr_relax_delete_bytes (bfd *abfd, Elf_Internal_Rela *irel, *irelend; Elf_Internal_Sym *isym; Elf_Internal_Sym *isymbuf = NULL; - bfd_vma toaddr; + bfd_vma toaddr, reloc_toaddr; struct elf_link_hash_entry **sym_hashes; struct elf_link_hash_entry **end_hashes; unsigned int symcount; struct avr_relax_info *relax_info; struct avr_property_record *prop_record = NULL; + bfd_boolean did_shrink = FALSE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); @@ -1862,15 +1859,32 @@ elf32_avr_relax_delete_bytes (bfd *abfd, } } + /* We need to look at all relocs with offsets less than toaddr. prop + records handling adjusts toaddr downwards to avoid moving syms at the + address of the property record, but all relocs with offsets between addr + and the current value of toaddr need to have their offsets adjusted. + Assume addr = 0, toaddr = 4 and count = 2. After prop records handling, + toaddr becomes 2, but relocs with offsets 2 and 3 still need to be + adjusted (to 0 and 1 respectively), as the first 2 bytes are now gone. + So record the current value of toaddr here, and use it when adjusting + reloc offsets. */ + reloc_toaddr = toaddr; + irel = elf_section_data (sec)->relocs; irelend = irel + sec->reloc_count; /* Actually delete the bytes. */ if (toaddr - addr - count > 0) - memmove (contents + addr, contents + addr + count, - (size_t) (toaddr - addr - count)); + { + memmove (contents + addr, contents + addr + count, + (size_t) (toaddr - addr - count)); + did_shrink = TRUE; + } if (prop_record == NULL) - sec->size -= count; + { + sec->size -= count; + did_shrink = TRUE; + } else { /* Use the property record to fill in the bytes we've opened up. */ @@ -1889,6 +1903,11 @@ elf32_avr_relax_delete_bytes (bfd *abfd, prop_record->data.align.preceding_deleted += count; break; }; + /* If toaddr == (addr + count), then we didn't delete anything, yet + we fill count bytes backwards from toaddr. This is still ok - we + end up overwriting the bytes we would have deleted. We just need + to remember we didn't delete anything i.e. don't set did_shrink, + so that we don't corrupt reloc offsets or symbol values.*/ memset (contents + toaddr - count, fill, count); /* Adjust the TOADDR to avoid moving symbols located at the address @@ -1896,6 +1915,9 @@ elf32_avr_relax_delete_bytes (bfd *abfd, toaddr -= count; } + if (!did_shrink) + return TRUE; + /* Adjust all the reloc addresses. */ for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++) { @@ -1906,7 +1928,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd, /* Get the new reloc address. */ if ((irel->r_offset > addr - && irel->r_offset < toaddr)) + && irel->r_offset < reloc_toaddr)) { if (debug_relax) printf ("Relocation at address 0x%x needs to be moved.\n" @@ -4068,11 +4090,13 @@ avr_elf32_load_records_from_section (bfd *abfd, asection *sec) } free (contents); - free (internal_relocs); + if (elf_section_data (sec)->relocs != internal_relocs) + free (internal_relocs); return r_list; load_failed: - free (internal_relocs); + if (elf_section_data (sec)->relocs != internal_relocs) + free (internal_relocs); free (contents); free (r_list); return NULL; diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c index 7cc8b6d..b9d368f 100644 --- a/bfd/elf32-bfin.c +++ b/bfd/elf32-bfin.c @@ -1623,12 +1623,9 @@ bfin_relocate_section (bfd * output_bfd, } 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; - } + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); else { (*_bfd_error_handler) @@ -3209,13 +3206,13 @@ bfinfdpic_relocate_section (bfd * output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -3237,11 +3234,8 @@ bfinfdpic_relocate_section (bfd * output_bfd, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } @@ -4457,7 +4451,13 @@ elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd, if (bfinfdpic_got_section (info)) { BFD_ASSERT (bfinfdpic_gotrel_section (info)->size - == (bfinfdpic_gotrel_section (info)->reloc_count + /* PR 17334: It appears that the GOT section can end up + being bigger than the number of relocs. Presumably + because some relocs have been deleted. A test case has + yet to be generated for verify this, but in the meantime + the test below has been changed from == to >= so that + applications can continue to be built. */ + >= (bfinfdpic_gotrel_section (info)->reloc_count * sizeof (Elf32_External_Rel))); if (bfinfdpic_gotfixup_section (info)) @@ -5252,7 +5252,8 @@ bfin_adjust_dynamic_symbol (struct bfd_link_info *info, s = bfd_get_linker_section (dynobj, ".dynbss"); BFD_ASSERT (s != NULL); - /* We must generate a R_68K_COPY reloc to tell the dynamic linker to +#if 0 /* Bfin does not currently have a COPY reloc. */ + /* We must generate a R_BFIN_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. */ @@ -5265,7 +5266,13 @@ bfin_adjust_dynamic_symbol (struct bfd_link_info *info, srel->size += sizeof (Elf32_External_Rela); h->needs_copy = 1; } - +#else + if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) + { + (*_bfd_error_handler) (_("the bfin target does not currently support the generation of copy relocations")); + return FALSE; + } +#endif /* 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); diff --git a/bfd/elf32-cr16.c b/bfd/elf32-cr16.c index 21aeda7..9408024 100644 --- a/bfd/elf32-cr16.c +++ b/bfd/elf32-cr16.c @@ -1472,18 +1472,14 @@ elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info, switch (r) { case bfd_reloc_overflow: - if (!((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*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: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -1503,10 +1499,8 @@ elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* Fall through. */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } @@ -2743,21 +2737,19 @@ _bfd_cr16_elf_finish_dynamic_sections (bfd * output_bfd, break; case DT_PLTGOT: - name = ".got"; + name = ".got.plt"; 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; + s = bfd_get_linker_section (dynobj, name); + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 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); + s = bfd_get_linker_section (dynobj, ".rela.plt"); dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -2772,7 +2764,7 @@ _bfd_cr16_elf_finish_dynamic_sections (bfd * output_bfd, 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"); + s = bfd_get_linker_section (dynobj, ".rela.plt"); if (s != NULL) dyn.d_un.d_val -= s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c index ef98136..d3f56f1 100644 --- a/bfd/elf32-cr16c.c +++ b/bfd/elf32-cr16c.c @@ -765,18 +765,14 @@ elf32_cr16c_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - if (!((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*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: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -796,10 +792,8 @@ elf32_cr16c_relocate_section (bfd *output_bfd, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c index 7799cf4..e759745 100644 --- a/bfd/elf32-cris.c +++ b/bfd/elf32-cris.c @@ -1973,7 +1973,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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) @@ -2010,9 +2010,8 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, break; case bfd_reloc_undefined: - r = info->callbacks->undefined_symbol - (info, symname, input_bfd, input_section, rel->r_offset, - TRUE); + (*info->callbacks->undefined_symbol) + (info, symname, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -2033,11 +2032,8 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, } if (msg) - r = info->callbacks->warning - (info, msg, symname, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, symname, input_bfd, + input_section, rel->r_offset); } } @@ -2336,22 +2332,21 @@ elf_cris_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTGOT: - s = bfd_get_section_by_name (output_bfd, ".got"); - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = sgot->output_section->vma + sgot->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_JMPREL: /* Yes, we *can* have a .plt and no .plt.rela, for instance if all symbols are found in the .got (not .got.plt). */ - s = bfd_get_section_by_name (output_bfd, ".rela.plt"); - dyn.d_un.d_ptr = s != NULL ? s->vma : 0; + s = bfd_get_linker_section (dynobj, ".rela.plt"); + dyn.d_un.d_ptr = s != NULL ? (s->output_section->vma + + s->output_offset) : 0; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_PLTRELSZ: - s = bfd_get_section_by_name (output_bfd, ".rela.plt"); + s = bfd_get_linker_section (dynobj, ".rela.plt"); if (s == NULL) dyn.d_un.d_val = 0; else @@ -2367,7 +2362,7 @@ elf_cris_finish_dynamic_sections (bfd *output_bfd, 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"); + s = bfd_get_linker_section (dynobj, ".rela.plt"); if (s != NULL) dyn.d_un.d_val -= s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); @@ -4032,8 +4027,10 @@ elf_cris_discard_excess_program_dynamics (struct elf_cris_link_hash_entry *h, have to export it as a dynamic symbol. This was already done for functions; doing this for all symbols would presumably not introduce new problems. Of course we don't do this if we're - exporting all dynamic symbols. */ - if (! info->export_dynamic + exporting all dynamic symbols, or all data symbols, regardless of + them being referenced or not. */ + if (! (info->export_dynamic + || (h->root.type != STT_FUNC && info->dynamic_data)) && h->root.dynindx != -1 && !h->root.def_dynamic && !h->root.ref_dynamic) diff --git a/bfd/elf32-crx.c b/bfd/elf32-crx.c index 65b9355..cc8bedf 100644 --- a/bfd/elf32-crx.c +++ b/bfd/elf32-crx.c @@ -909,18 +909,14 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info, switch (r) { case bfd_reloc_overflow: - if (!((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*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: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -940,10 +936,8 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* Fall through. */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c index f0629b7..f6d4b0e 100644 --- a/bfd/elf32-d10v.c +++ b/bfd/elf32-d10v.c @@ -498,18 +498,14 @@ elf32_d10v_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - if (!((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*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: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -529,10 +525,8 @@ elf32_d10v_relocate_section (bfd *output_bfd, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } diff --git a/bfd/elf32-dlx.c b/bfd/elf32-dlx.c index b5c7d6e..0dcb706 100644 --- a/bfd/elf32-dlx.c +++ b/bfd/elf32-dlx.c @@ -23,6 +23,7 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf/dlx.h" +#include "elf32-dlx.h" #define USE_REL 1 @@ -40,8 +41,6 @@ static int skip_dlx_elf_hi16_reloc = 0; -extern int set_dlx_skip_hi16_flag (int); - int set_dlx_skip_hi16_flag (int flag) { diff --git a/bfd/elf32-dlx.h b/bfd/elf32-dlx.h new file mode 100644 index 0000000..f2cdd12 --- /dev/null +++ b/bfd/elf32-dlx.h @@ -0,0 +1,34 @@ +/* DLX specific support for 32-bit ELF + Copyright (C) 2002-2016 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. */ + +#ifndef _ELF32_DLX_H +#define _ELF32_DLX_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern int set_dlx_skip_hi16_flag (int); + +#ifdef __cplusplus + } +#endif + +#endif /* _ELF32_DLX_H */ diff --git a/bfd/elf32-epiphany.c b/bfd/elf32-epiphany.c index 25ed0fe..420dc8b 100644 --- a/bfd/elf32-epiphany.c +++ b/bfd/elf32-epiphany.c @@ -547,13 +547,13 @@ epiphany_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -578,11 +578,8 @@ epiphany_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-fr30.c b/bfd/elf32-fr30.c index 0ae09f1..7dd4ca4 100644 --- a/bfd/elf32-fr30.c +++ b/bfd/elf32-fr30.c @@ -576,15 +576,14 @@ fr30_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -605,11 +604,8 @@ fr30_elf_relocate_section (bfd *output_bfd, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c index e0e3806..5990faa 100644 --- a/bfd/elf32-frv.c +++ b/bfd/elf32-frv.c @@ -4031,13 +4031,13 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -4065,9 +4065,6 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, input_bfd, input_section, rel->r_offset, name, msg); return FALSE; } - - if (! r) - return FALSE; } } diff --git a/bfd/elf32-ft32.c b/bfd/elf32-ft32.c index 47f80c3..f46031e 100644 --- a/bfd/elf32-ft32.c +++ b/bfd/elf32-ft32.c @@ -160,7 +160,7 @@ struct ft32_reloc_map static const struct ft32_reloc_map ft32_reloc_map [] = { { BFD_RELOC_NONE, R_FT32_NONE }, - { BFD_RELOC_32, R_FT32_20 }, + { BFD_RELOC_32, R_FT32_32 }, { BFD_RELOC_16, R_FT32_16 }, { BFD_RELOC_8, R_FT32_8 }, { BFD_RELOC_FT32_10, R_FT32_10 }, @@ -320,15 +320,14 @@ ft32_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -349,11 +348,8 @@ ft32_elf_relocate_section (bfd *output_bfd, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c index 9996cb3..5368385 100644 --- a/bfd/elf32-h8300.c +++ b/bfd/elf32-h8300.c @@ -507,18 +507,14 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info, switch (r) { case bfd_reloc_overflow: - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*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: - if (! ((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -538,10 +534,8 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index 699d02a..be10c9b 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -455,6 +455,18 @@ elf32_hppa_link_hash_table_create (bfd *abfd) return &htab->etab.root; } +/* Initialize the linker stubs BFD so that we can use it for linker + created dynamic sections. */ + +void +elf32_hppa_init_stub_bfd (bfd *abfd, struct bfd_link_info *info) +{ + struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info); + + elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS32; + htab->etab.dynobj = abfd; +} + /* Build a name for an entry in the stub hash table. */ static char * @@ -1347,8 +1359,6 @@ elf32_hppa_check_relocs (bfd *abfd, relocation for this entry. */ if (htab->sgot == NULL) { - if (htab->etab.dynobj == NULL) - htab->etab.dynobj = abfd; if (!elf32_hppa_create_dynamic_sections (htab->etab.dynobj, info)) return FALSE; } @@ -1484,9 +1494,6 @@ elf32_hppa_check_relocs (bfd *abfd, this reloc. */ if (sreloc == NULL) { - if (htab->etab.dynobj == NULL) - htab->etab.dynobj = abfd; - sreloc = _bfd_elf_make_dynamic_reloc_section (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE); @@ -3071,7 +3078,8 @@ elf32_hppa_size_stubs for (stub_sec = htab->stub_bfd->sections; stub_sec != NULL; stub_sec = stub_sec->next) - stub_sec->size = 0; + if ((stub_sec->flags & SEC_LINKER_CREATED) == 0) + stub_sec->size = 0; bfd_hash_traverse (&htab->bstab, hppa_size_one_stub, htab); @@ -3193,16 +3201,15 @@ elf32_hppa_build_stubs (struct bfd_link_info *info) for (stub_sec = htab->stub_bfd->sections; stub_sec != NULL; stub_sec = stub_sec->next) - { - bfd_size_type size; - - /* Allocate memory to hold the linker stubs. */ - size = stub_sec->size; - stub_sec->contents = bfd_zalloc (htab->stub_bfd, size); - if (stub_sec->contents == NULL && size != 0) - return FALSE; - stub_sec->size = 0; - } + if ((stub_sec->flags & SEC_LINKER_CREATED) == 0 + && stub_sec->size != 0) + { + /* Allocate memory to hold the linker stubs. */ + stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size); + if (stub_sec->contents == NULL) + return FALSE; + stub_sec->size = 0; + } /* Build the stubs as directed by the stub hash table. */ table = &htab->bstab; @@ -3726,10 +3733,9 @@ elf32_hppa_relocate_section (bfd *output_bfd, && 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, rela->r_offset, FALSE)) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, eh_name (eh), input_bfd, + input_section, rela->r_offset, FALSE); warned_undef = TRUE; } } @@ -4304,12 +4310,9 @@ elf32_hppa_relocate_section (bfd *output_bfd, } } else - { - if (!((*info->callbacks->reloc_overflow) - (info, (hh ? &hh->eh.root : NULL), sym_name, howto->name, - (bfd_vma) 0, input_bfd, input_section, rela->r_offset))) - return FALSE; - } + (*info->callbacks->reloc_overflow) + (info, (hh ? &hh->eh.root : NULL), sym_name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rela->r_offset); } return TRUE; diff --git a/bfd/elf32-hppa.h b/bfd/elf32-hppa.h index 87ae5f1..972d749 100644 --- a/bfd/elf32-hppa.h +++ b/bfd/elf32-hppa.h @@ -36,6 +36,13 @@ #include "libhppa.h" #include "elf/hppa.h" +#ifdef __cplusplus +extern "C" { +#endif + +void elf32_hppa_init_stub_bfd + (bfd *, struct bfd_link_info *); + int elf32_hppa_setup_section_lists (bfd *, struct bfd_link_info *); @@ -74,4 +81,8 @@ extern elf_hppa_reloc_type ** _bfd_elf32_hppa_gen_reloc_type #define R_HPPA_ABS_CALL R_PARISC_DIR17F #define R_HPPA_COMPLEX R_PARISC_UNIMPLEMENTED +#ifdef __cplusplus +} +#endif + #endif /* _ELF32_HPPA_H */ diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c index 57af406..4f6d727 100644 --- a/bfd/elf32-i370.c +++ b/bfd/elf32-i370.c @@ -919,13 +919,13 @@ i370_elf_finish_dynamic_sections (bfd *output_bfd, { asection *s; - s = bfd_get_section_by_name (output_bfd, name); + s = bfd_get_linker_section (dynobj, name); if (s == NULL) dyn.d_un.d_val = 0; else { if (! size) - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; else dyn.d_un.d_val = s->size; } @@ -1137,15 +1137,13 @@ i370_elf_relocate_section (bfd *output_bfd, ; else if (!bfd_link_relocatable (info)) { - 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)))) - { - ret = FALSE; - continue; - } + (*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))); + ret = FALSE; + continue; } } diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index ccd0135..4179572 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -737,6 +737,20 @@ static const struct elf_i386_backend_data elf_i386_arch_bed = #define elf_backend_arch_data &elf_i386_arch_bed +/* Is a undefined weak symbol which is resolved to 0. Reference to an + undefined weak symbol is resolved to 0 when building executable if + it isn't dynamic and + 1. Has non-GOT/non-PLT relocations in text section. Or + 2. Has no GOT/PLT relocation. + */ +#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, GOT_RELOC, EH) \ + ((EH)->elf.root.type == bfd_link_hash_undefweak \ + && bfd_link_executable (INFO) \ + && (elf_i386_hash_table (INFO)->interp == NULL \ + || !(GOT_RELOC) \ + || (EH)->has_non_got_reloc \ + || !(INFO)->dynamic_undefined_weak)) + /* i386 ELF linker hash entry. */ struct elf_i386_link_hash_entry @@ -767,6 +781,17 @@ struct elf_i386_link_hash_entry /* Symbol is referenced by R_386_GOTOFF relocation. */ unsigned int gotoff_ref : 1; + /* Symbol has GOT or PLT relocations. */ + unsigned int has_got_reloc : 1; + + /* Symbol has non-GOT/non-PLT relocations in text sections. */ + unsigned int has_non_got_reloc : 1; + + /* 0: symbol isn't ___tls_get_addr. + 1: symbol is ___tls_get_addr. + 2: symbol is unknown. */ + unsigned int tls_get_addr : 2; + /* Reference count of C/C++ function pointer relocations in read-write section which can be resolved at run-time. */ bfd_signed_vma func_pointer_refcount; @@ -821,6 +846,7 @@ struct elf_i386_link_hash_table struct elf_link_hash_table elf; /* Short-cuts to get to dynamic linker sections. */ + asection *interp; asection *sdynbss; asection *srelbss; asection *plt_eh_frame; @@ -857,6 +883,10 @@ struct elf_i386_link_hash_table /* The index of the next unused R_386_IRELATIVE slot in .rel.plt. */ bfd_vma next_irelative_index; + + /* TRUE if there are dynamic relocs against IFUNC symbols that apply + to read-only sections. */ + bfd_boolean readonly_dynrelocs_against_ifunc; }; /* Get the i386 ELF linker hash table from a link_info structure. */ @@ -895,6 +925,9 @@ elf_i386_link_hash_newfunc (struct bfd_hash_entry *entry, eh->dyn_relocs = NULL; eh->tls_type = GOT_UNKNOWN; eh->gotoff_ref = 0; + eh->has_got_reloc = 0; + eh->has_non_got_reloc = 0; + eh->tls_get_addr = 2; eh->func_pointer_refcount = 0; eh->plt_got.offset = (bfd_vma) -1; eh->tlsdesc_got = (bfd_vma) -1; @@ -1039,6 +1072,17 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) if (htab == NULL) return FALSE; + /* Set the contents of the .interp section to the interpreter. */ + if (bfd_link_executable (info) && !info->nointerp) + { + asection *s = bfd_get_linker_section (dynobj, ".interp"); + if (s == NULL) + abort (); + s->size = sizeof ELF_DYNAMIC_INTERPRETER; + s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; + htab->interp = s; + } + htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); if (!htab->sdynbss) abort (); @@ -1138,6 +1182,9 @@ elf_i386_copy_indirect_symbol (struct bfd_link_info *info, generate a R_386_COPY reloc. */ edir->gotoff_ref |= eind->gotoff_ref; + edir->has_got_reloc |= eind->has_got_reloc; + edir->has_non_got_reloc |= eind->has_non_got_reloc; + if (ELIMINATE_COPY_RELOCS && ind->root.type != bfd_link_hash_indirect && dir->dynamic_adjusted) @@ -1167,7 +1214,7 @@ elf_i386_copy_indirect_symbol (struct bfd_link_info *info, from R_TYPE. */ static bfd_boolean -elf_i386_check_tls_transition (bfd *abfd, asection *sec, +elf_i386_check_tls_transition (asection *sec, bfd_byte *contents, Elf_Internal_Shdr *symtab_hdr, struct elf_link_hash_entry **sym_hashes, @@ -1175,26 +1222,12 @@ elf_i386_check_tls_transition (bfd *abfd, asection *sec, const Elf_Internal_Rela *rel, const Elf_Internal_Rela *relend) { - unsigned int val, type; + unsigned int val, type, reg; 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; - } - } + bfd_byte *call; + bfd_boolean indirect_call, tls_get_addr; offset = rel->r_offset; switch (r_type) @@ -1204,69 +1237,130 @@ elf_i386_check_tls_transition (bfd *abfd, asection *sec, if (offset < 2 || (rel + 1) >= relend) return FALSE; - type = bfd_get_8 (abfd, contents + offset - 2); + indirect_call = FALSE; + call = contents + offset + 4; + val = *(call - 5); + type = *(call - 6); 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 + leal foo@tlsgd(,%ebx,1), %eax + call ___tls_get_addr@PLT + or + leal foo@tlsgd(%ebx) %eax + call ___tls_get_addr@PLT + nop + or + leal foo@tlsgd(%reg), %eax + call *___tls_get_addr@GOT(%reg) + which may be converted to + addr32 call ___tls_get_addr can transit to different access model. */ - if ((offset + 10) > sec->size || - (type != 0x8d && type != 0x04)) + 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 */ + /* leal foo@tlsgd(,%ebx,1), %eax + call ___tls_get_addr@PLT */ if (offset < 3) return FALSE; - if (bfd_get_8 (abfd, contents + offset - 3) != 0x8d) - return FALSE; - - if ((val & 0xc7) != 0x05 || val == (4 << 3)) + if (*(call - 7) != 0x8d + || val != 0x1d + || call[0] != 0xe8) return FALSE; } else { - /* leal foo@tlsgd(%reg), %eax; call ___tls_get_addr; nop */ - if ((val & 0xf8) != 0x80 || (val & 7) == 4) + /* This must be + leal foo@tlsgd(%ebx), %eax + call ___tls_get_addr@PLT + nop + or + leal foo@tlsgd(%reg), %eax + call *___tls_get_addr@GOT(%reg) + which may be converted to + addr32 call ___tls_get_addr + + %eax can't be used as the GOT base register since it + is used to pass parameter to ___tls_get_addr. */ + reg = val & 7; + if ((val & 0xf8) != 0x80 || reg == 4 || reg == 0) return FALSE; - if (bfd_get_8 (abfd, contents + offset + 9) != 0x90) + indirect_call = call[0] == 0xff; + if (!(reg == 3 && call[0] == 0xe8 && call[5] == 0x90) + && !(call[0] == 0x67 && call[1] == 0xe8) + && !(indirect_call + && (call[1] & 0xf8) == 0x90 + && (call[1] & 0x7) == reg)) return FALSE; } } else { /* Check transition from LD access model. Only - leal foo@tlsgd(%reg), %eax; call ___tls_get_addr + leal foo@tlsldm(%ebx), %eax + call ___tls_get_addr@PLT + or + leal foo@tlsldm(%reg), %eax + call *___tls_get_addr@GOT(%reg) + which may be converted to + addr32 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) + /* %eax can't be used as the GOT base register since it is + used to pass parameter to ___tls_get_addr. */ + reg = val & 7; + if ((val & 0xf8) != 0x80 || reg == 4 || reg == 0) return FALSE; - } - if (bfd_get_8 (abfd, contents + offset + 4) != 0xe8) - return FALSE; + indirect_call = call[0] == 0xff; + if (!(reg == 3 && call[0] == 0xe8) + && !(call[0] == 0x67 && call[1] == 0xe8) + && !(indirect_call + && (call[1] & 0xf8) == 0x90 + && (call[1] & 0x7) == reg)) + return FALSE; + } r_symndx = ELF32_R_SYM (rel[1].r_info); if (r_symndx < symtab_hdr->sh_info) return FALSE; + tls_get_addr = 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)); + if (h != NULL && h->root.root.string != NULL) + { + struct elf_i386_link_hash_entry *eh + = (struct elf_i386_link_hash_entry *) h; + tls_get_addr = eh->tls_get_addr == 1; + if (eh->tls_get_addr > 1) + { + /* Use strncmp to check ___tls_get_addr since + ___tls_get_addr may be versioned. */ + if (strncmp (h->root.root.string, "___tls_get_addr", 15) + == 0) + { + eh->tls_get_addr = 1; + tls_get_addr = TRUE; + } + else + eh->tls_get_addr = 0; + } + } + + if (!tls_get_addr) + return FALSE; + else if (indirect_call) + return (ELF32_R_TYPE (rel[1].r_info) == R_386_GOT32X); + else + return (ELF32_R_TYPE (rel[1].r_info) == R_386_PC32 + || ELF32_R_TYPE (rel[1].r_info) == R_386_PLT32); case R_386_TLS_IE: /* Check transition from IE access model: @@ -1328,13 +1422,13 @@ elf_i386_check_tls_transition (bfd *abfd, asection *sec, case R_386_TLS_DESC_CALL: /* Check transition from GDesc access model: - call *x@tlsdesc(%rax) + call *x@tlsdesc(%eax) */ if (offset + 2 <= sec->size) { - /* Make sure that it's a call *x@tlsdesc(%rax). */ - static const unsigned char call[] = { 0xff, 0x10 }; - return memcmp (contents + offset, call, 2) == 0; + /* Make sure that it's a call *x@tlsdesc(%eax). */ + call = contents + offset; + return call[0] == 0xff && call[1] == 0x10; } return FALSE; @@ -1356,7 +1450,8 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, const Elf_Internal_Rela *rel, const Elf_Internal_Rela *relend, struct elf_link_hash_entry *h, - unsigned long r_symndx) + unsigned long r_symndx, + bfd_boolean from_relocate_section) { unsigned int from_type = *r_type; unsigned int to_type = from_type; @@ -1385,10 +1480,9 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, 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) + /* When we are called from elf_i386_relocate_section, there may + be additional transitions based on TLS_TYPE. */ + if (from_relocate_section) { unsigned int new_to_type = to_type; @@ -1432,7 +1526,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, /* Check if the transition can be performed. */ if (check - && ! elf_i386_check_tls_transition (abfd, sec, contents, + && ! elf_i386_check_tls_transition (sec, contents, symtab_hdr, sym_hashes, from_type, rel, relend)) { @@ -1474,9 +1568,261 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, return TRUE; } +/* With the local symbol, foo, we convert + mov foo@GOT[(%reg1)], %reg2 + to + lea foo[@GOTOFF(%reg1)], %reg2 + and convert + call/jmp *foo@GOT[(%reg)] + to + nop call foo/jmp foo nop + When PIC is false, convert + test %reg1, foo@GOT[(%reg2)] + to + test $foo, %reg1 + and convert + binop foo@GOT[(%reg1)], %reg2 + to + binop $foo, %reg2 + where binop is one of adc, add, and, cmp, or, sbb, sub, xor + instructions. */ + +static +bfd_boolean +elf_i386_convert_load_reloc (bfd *abfd, Elf_Internal_Shdr *symtab_hdr, + bfd_byte *contents, + Elf_Internal_Rela *irel, + struct elf_link_hash_entry *h, + bfd_boolean *converted, + struct bfd_link_info *link_info) +{ + struct elf_i386_link_hash_table *htab; + unsigned int opcode; + unsigned int modrm; + bfd_boolean baseless; + Elf_Internal_Sym *isym; + unsigned int addend; + unsigned int nop; + bfd_vma nop_offset; + bfd_boolean is_pic; + bfd_boolean to_reloc_32; + unsigned int r_type; + unsigned int r_symndx; + bfd_vma roff = irel->r_offset; + + if (roff < 2) + return TRUE; + + /* Addend for R_386_GOT32X relocations must be 0. */ + addend = bfd_get_32 (abfd, contents + roff); + if (addend != 0) + return TRUE; + + htab = elf_i386_hash_table (link_info); + is_pic = bfd_link_pic (link_info); + + r_type = ELF32_R_TYPE (irel->r_info); + r_symndx = ELF32_R_SYM (irel->r_info); + + modrm = bfd_get_8 (abfd, contents + roff - 1); + baseless = (modrm & 0xc7) == 0x5; + + if (baseless && is_pic) + { + /* For PIC, disallow R_386_GOT32X without a base register + since we don't know what the GOT base is. */ + const char *name; + + if (h == NULL) + { + isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, + r_symndx); + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); + } + else + name = h->root.root.string; + + (*_bfd_error_handler) + (_("%B: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"), + abfd, name); + return FALSE; + } + + opcode = bfd_get_8 (abfd, contents + roff - 2); + + /* Convert to R_386_32 if PIC is false or there is no base + register. */ + to_reloc_32 = !is_pic || baseless; + + /* Try to convert R_386_GOT32X. Get the symbol referred to by the + reloc. */ + if (h == NULL) + { + if (opcode == 0x0ff) + /* Convert "call/jmp *foo@GOT[(%reg)]". */ + goto convert_branch; + else + /* Convert "mov foo@GOT[(%reg1)], %reg2", + "test %reg1, foo@GOT(%reg2)" and + "binop foo@GOT[(%reg1)], %reg2". */ + goto convert_load; + } + + /* Undefined weak symbol is only bound locally in executable + and its reference is resolved as 0. */ + if (UNDEFINED_WEAK_RESOLVED_TO_ZERO (link_info, TRUE, + elf_i386_hash_entry (h))) + { + if (opcode == 0xff) + { + /* No direct branch to 0 for PIC. */ + if (is_pic) + return TRUE; + else + goto convert_branch; + } + else + { + /* We can convert load of address 0 to R_386_32. */ + to_reloc_32 = TRUE; + goto convert_load; + } + } + + if (opcode == 0xff) + { + /* We have "call/jmp *foo@GOT[(%reg)]". */ + if ((h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && SYMBOL_REFERENCES_LOCAL (link_info, h)) + { + /* The function is locally defined. */ +convert_branch: + /* Convert R_386_GOT32X to R_386_PC32. */ + if (modrm == 0x15 || (modrm & 0xf8) == 0x90) + { + struct elf_i386_link_hash_entry *eh + = (struct elf_i386_link_hash_entry *) h; + + /* Convert to "nop call foo". ADDR_PREFIX_OPCODE + is a nop prefix. */ + modrm = 0xe8; + /* To support TLS optimization, always use addr32 prefix + for "call *___tls_get_addr@GOT(%reg)". */ + if (eh && eh->tls_get_addr == 1) + { + nop = 0x67; + nop_offset = irel->r_offset - 2; + } + else + { + nop = link_info->call_nop_byte; + if (link_info->call_nop_as_suffix) + { + nop_offset = roff + 3; + irel->r_offset -= 1; + } + else + nop_offset = roff - 2; + } + } + else + { + /* Convert to "jmp foo nop". */ + modrm = 0xe9; + nop = NOP_OPCODE; + nop_offset = roff + 3; + irel->r_offset -= 1; + } + + bfd_put_8 (abfd, nop, contents + nop_offset); + bfd_put_8 (abfd, modrm, contents + irel->r_offset - 1); + /* When converting to PC-relative relocation, we + need to adjust addend by -4. */ + bfd_put_32 (abfd, -4, contents + irel->r_offset); + irel->r_info = ELF32_R_INFO (r_symndx, R_386_PC32); + + *converted = TRUE; + } + } + else + { + /* We have "mov foo@GOT[(%re1g)], %reg2", + "test %reg1, foo@GOT(%reg2)" and + "binop foo@GOT[(%reg1)], %reg2". + + Avoid optimizing _DYNAMIC since ld.so may use its + link-time address. */ + if (h == htab->elf.hdynamic) + return TRUE; + + /* def_regular is set by an assignment in a linker script in + bfd_elf_record_link_assignment. */ + if ((h->def_regular + || h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && SYMBOL_REFERENCES_LOCAL (link_info, h)) + { +convert_load: + if (opcode == 0x8b) + { + if (to_reloc_32) + { + /* Convert "mov foo@GOT[(%reg1)], %reg2" to + "mov $foo, %reg2" with R_386_32. */ + r_type = R_386_32; + modrm = 0xc0 | (modrm & 0x38) >> 3; + bfd_put_8 (abfd, modrm, contents + roff - 1); + opcode = 0xc7; + } + else + { + /* Convert "mov foo@GOT(%reg1), %reg2" to + "lea foo@GOTOFF(%reg1), %reg2". */ + r_type = R_386_GOTOFF; + opcode = 0x8d; + } + } + else + { + /* Only R_386_32 is supported. */ + if (!to_reloc_32) + return TRUE; + + if (opcode == 0x85) + { + /* Convert "test %reg1, foo@GOT(%reg2)" to + "test $foo, %reg1". */ + modrm = 0xc0 | (modrm & 0x38) >> 3; + opcode = 0xf7; + } + else + { + /* Convert "binop foo@GOT(%reg1), %reg2" to + "binop $foo, %reg2". */ + modrm = (0xc0 + | (modrm & 0x38) >> 3 + | (opcode & 0x3c)); + opcode = 0x81; + } + bfd_put_8 (abfd, modrm, contents + roff - 1); + r_type = R_386_32; + } + + bfd_put_8 (abfd, opcode, contents + roff - 2); + irel->r_info = ELF32_R_INFO (r_symndx, r_type); + + *converted = TRUE; + } + } + + return TRUE; +} + /* Rename some of the generic section flags to better document how they are used here. */ -#define need_convert_load sec_flg0 +#define need_convert_load sec_flg0 +#define check_relocs_failed sec_flg1 /* Look through the relocs for a section during the first phase, and calculate needed space in the global offset table, procedure linkage @@ -1494,16 +1840,38 @@ elf_i386_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; asection *sreloc; + bfd_byte *contents; bfd_boolean use_plt_got; if (bfd_link_relocatable (info)) return TRUE; + /* Don't do anything special with non-loaded, non-alloced sections. + In particular, any relocs in such sections should not affect GOT + and PLT reference counting (ie. we don't allow them to create GOT + or PLT entries), there's no possibility or desire to optimize TLS + relocs, and there's not much point in propagating relocs to shared + libs that the dynamic linker won't relocate. */ + if ((sec->flags & SEC_ALLOC) == 0) + return TRUE; + BFD_ASSERT (is_i386_elf (abfd)); htab = elf_i386_hash_table (info); if (htab == NULL) - return FALSE; + { + sec->check_relocs_failed = 1; + return FALSE; + } + + /* Get the section contents. */ + 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)) + { + sec->check_relocs_failed = 1; + return FALSE; + } use_plt_got = (!get_elf_i386_backend_data (abfd)->is_vxworks && (get_elf_i386_backend_data (abfd) @@ -1533,7 +1901,7 @@ elf_i386_check_relocs (bfd *abfd, (*_bfd_error_handler) (_("%B: bad symbol index: %d"), abfd, r_symndx); - return FALSE; + goto error_return; } if (r_symndx < symtab_hdr->sh_info) @@ -1542,14 +1910,14 @@ elf_i386_check_relocs (bfd *abfd, isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); if (isym == NULL) - return FALSE; + goto error_return; /* 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; + goto error_return; /* Fake a STT_GNU_IFUNC symbol. */ h->type = STT_GNU_IFUNC; @@ -1573,10 +1941,6 @@ elf_i386_check_relocs (bfd *abfd, eh = (struct elf_i386_link_hash_entry *) h; 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: @@ -1591,8 +1955,11 @@ elf_i386_check_relocs (bfd *abfd, case R_386_GOT32X: if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - if (!_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info)) - return FALSE; + /* Create the ifunc sections for static executables. */ + if (h->type == STT_GNU_IFUNC + && !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, + info)) + goto error_return; break; } @@ -1605,11 +1972,11 @@ elf_i386_check_relocs (bfd *abfd, |= elf_gnu_symbol_ifunc; } - if (! elf_i386_tls_transition (info, abfd, sec, NULL, + if (! elf_i386_tls_transition (info, abfd, sec, contents, symtab_hdr, sym_hashes, &r_type, GOT_UNKNOWN, - rel, rel_end, h, r_symndx)) - return FALSE; + rel, rel_end, h, r_symndx, FALSE)) + goto error_return; switch (r_type) { @@ -1630,6 +1997,7 @@ elf_i386_check_relocs (bfd *abfd, if (h == NULL) continue; + eh->has_got_reloc = 1; h->needs_plt = 1; h->plt.refcount += 1; break; @@ -1699,7 +2067,7 @@ elf_i386_check_relocs (bfd *abfd, local_got_refcounts = (bfd_signed_vma *) bfd_zalloc (abfd, size); if (local_got_refcounts == NULL) - return FALSE; + goto error_return; elf_local_got_refcounts (abfd) = local_got_refcounts; elf_i386_local_tlsdesc_gotent (abfd) = (bfd_vma *) (local_got_refcounts + symtab_hdr->sh_info); @@ -1735,7 +2103,7 @@ elf_i386_check_relocs (bfd *abfd, "thread local symbol"), abfd, name); bfd_set_error (bfd_error_bad_value); - return FALSE; + goto error_return; } } @@ -1757,22 +2125,36 @@ elf_i386_check_relocs (bfd *abfd, if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; if (!_bfd_elf_create_got_section (htab->elf.dynobj, info)) - return FALSE; + goto error_return; } if (r_type != R_386_TLS_IE) - break; + { + if (eh != NULL) + eh->has_got_reloc = 1; + break; + } /* Fall through */ case R_386_TLS_LE_32: case R_386_TLS_LE: + if (eh != NULL) + eh->has_got_reloc = 1; if (bfd_link_executable (info)) break; info->flags |= DF_STATIC_TLS; - /* Fall through */ + goto do_relocation; case R_386_32: case R_386_PC32: - if (h != NULL && bfd_link_executable (info)) + if (eh != NULL && (sec->flags & SEC_CODE) != 0) + eh->has_non_got_reloc = 1; +do_relocation: + /* We are called after all symbols have been resolved. Only + relocation against STT_GNU_IFUNC symbol must go through + PLT. */ + if (h != NULL + && (bfd_link_executable (info) + || h->type == STT_GNU_IFUNC)) { /* If this reloc is in a read-only section, we might need a copy reloc. We can't check reliably at this @@ -1782,9 +2164,13 @@ elf_i386_check_relocs (bfd *abfd, adjust_dynamic_symbol. */ h->non_got_ref = 1; - /* We may need a .plt entry if the function this reloc - refers to is in a shared lib. */ - h->plt.refcount += 1; + /* We may need a .plt entry if the symbol is a function + defined in a shared lib or is a STT_GNU_IFUNC function + referenced from the code or read-only section. */ + if (!h->def_regular + || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0) + h->plt.refcount += 1; + if (r_type == R_386_PC32) { /* Since something like ".long foo - ." may be used @@ -1825,17 +2211,23 @@ do_size: 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. */ + symbol. + + Generate dynamic pointer relocation against STT_GNU_IFUNC + symbol in the non-code section. */ if ((bfd_link_pic (info) - && (sec->flags & SEC_ALLOC) != 0 && (r_type != R_386_PC32 || (h != NULL - && (! SYMBOLIC_BIND (info, h) + && (! (bfd_link_pie (info) + || SYMBOLIC_BIND (info, h)) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) + || (h != NULL + && h->type == STT_GNU_IFUNC + && r_type == R_386_32 + && (sec->flags & SEC_CODE) == 0) || (ELIMINATE_COPY_RELOCS && !bfd_link_pic (info) - && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak || !h->def_regular))) @@ -1855,7 +2247,7 @@ do_size: (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ FALSE); if (sreloc == NULL) - return FALSE; + goto error_return; } /* If this is a global symbol, we count the number of @@ -1875,7 +2267,7 @@ do_size: isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); if (isym == NULL) - return FALSE; + goto error_return; s = bfd_section_from_elf_index (abfd, isym->st_shndx); if (s == NULL) @@ -1892,7 +2284,7 @@ do_size: p = (struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt); if (p == NULL) - return FALSE; + goto error_return; p->next = *head; *head = p; p->sec = sec; @@ -1911,7 +2303,7 @@ do_size: Reconstruct it for later use during GC. */ case R_386_GNU_VTINHERIT: if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) - return FALSE; + goto error_return; break; /* This relocation describes which C++ vtable entries are actually @@ -1920,7 +2312,7 @@ do_size: BFD_ASSERT (h != NULL); if (h != NULL && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) - return FALSE; + goto error_return; break; default: @@ -1958,15 +2350,32 @@ do_size: || !bfd_set_section_alignment (htab->elf.dynobj, htab->plt_got, plt_got_align)) - return FALSE; + goto error_return; } - if ((r_type == R_386_GOT32 || r_type == R_386_GOT32X) + if (r_type == R_386_GOT32X && (h == NULL || h->type != STT_GNU_IFUNC)) sec->need_convert_load = 1; } + if (elf_section_data (sec)->this_hdr.contents != contents) + { + if (!info->keep_memory) + free (contents); + else + { + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents = contents; + } + } + return TRUE; + +error_return: + if (elf_section_data (sec)->this_hdr.contents != contents) + free (contents); + sec->check_relocs_failed = 1; + return FALSE; } /* Return the section that should be marked against GC for a given @@ -1990,160 +2399,22 @@ elf_i386_gc_mark_hook (asection *sec, return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); } -/* Update the got entry reference counts for the section being removed. */ +/* Remove undefined weak symbol from the dynamic symbol table if it + is resolved to 0. */ static bfd_boolean -elf_i386_gc_sweep_hook (bfd *abfd, - struct bfd_link_info *info, - asection *sec, - const Elf_Internal_Rela *relocs) +elf_i386_fixup_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *h) { - struct elf_i386_link_hash_table *htab; - 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 (bfd_link_relocatable (info)) - return TRUE; - - htab = elf_i386_hash_table (info); - if (htab == NULL) - return FALSE; - - elf_section_data (sec)->local_dynrel = NULL; - - symtab_hdr = &elf_symtab_hdr (abfd); - 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++) + if (h->dynindx != -1 + && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + elf_i386_hash_entry (h)->has_got_reloc, + elf_i386_hash_entry (h))) { - unsigned long r_symndx; - unsigned int r_type; - 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; - } - else - { - /* A local symbol. */ - Elf_Internal_Sym *isym; - - isym = bfd_sym_from_r_symndx (&htab->sym_cache, - abfd, r_symndx); - - /* Check relocation against local STT_GNU_IFUNC symbol. */ - if (isym != NULL - && ELF32_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) - { - h = elf_i386_get_local_sym_hash (htab, abfd, rel, FALSE); - if (h == NULL) - abort (); - } - } - - if (h) - { - struct elf_i386_link_hash_entry *eh; - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - eh = (struct elf_i386_link_hash_entry *) h; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next) - if (p->sec == sec) - { - /* Everything must go for SEC. */ - *pp = p->next; - break; - } - } - - r_type = ELF32_R_TYPE (rel->r_info); - 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: - if (htab->tls_ldm_got.refcount > 0) - htab->tls_ldm_got.refcount -= 1; - break; - - case R_386_TLS_GD: - case R_386_TLS_GOTDESC: - case R_386_TLS_DESC_CALL: - case R_386_TLS_IE_32: - case R_386_TLS_IE: - case R_386_TLS_GOTIE: - case R_386_GOT32: - case R_386_GOT32X: - if (h != NULL) - { - if (h->got.refcount > 0) - h->got.refcount -= 1; - if (h->type == STT_GNU_IFUNC) - { - if (h->plt.refcount > 0) - h->plt.refcount -= 1; - } - } - else if (local_got_refcounts != NULL) - { - if (local_got_refcounts[r_symndx] > 0) - local_got_refcounts[r_symndx] -= 1; - } - break; - - case R_386_32: - case R_386_PC32: - case R_386_SIZE32: - if (bfd_link_pic (info) - && (h == NULL || h->type != STT_GNU_IFUNC)) - break; - /* Fall through */ - - case R_386_PLT32: - if (h != NULL) - { - if (h->plt.refcount > 0) - h->plt.refcount -= 1; - if (r_type == R_386_32 - && (sec->flags & SEC_READONLY) == 0) - { - struct elf_i386_link_hash_entry *eh - = (struct elf_i386_link_hash_entry *) h; - if (eh->func_pointer_refcount > 0) - eh->func_pointer_refcount -= 1; - } - } - break; - - case R_386_GOTOFF: - if (h != NULL && h->type == STT_GNU_IFUNC) - { - if (h->got.refcount > 0) - h->got.refcount -= 1; - if (h->plt.refcount > 0) - h->plt.refcount -= 1; - } - break; - - default: - break; - } + h->dynindx = -1; + _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr, + h->dynstr_index); } - return TRUE; } @@ -2188,12 +2459,17 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info, if (pc_count || count) { - h->needs_plt = 1; h->non_got_ref = 1; - if (h->plt.refcount <= 0) - h->plt.refcount = 1; - else - h->plt.refcount += 1; + if (pc_count) + { + /* Increment PLT reference count only for PC-relative + references. */ + h->needs_plt = 1; + if (h->plt.refcount <= 0) + h->plt.refcount = 1; + else + h->plt.refcount += 1; + } } } @@ -2335,6 +2611,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) struct elf_i386_link_hash_entry *eh; struct elf_dyn_relocs *p; unsigned plt_entry_size; + bfd_boolean resolved_to_zero; if (h->root.type == bfd_link_hash_indirect) return TRUE; @@ -2348,6 +2625,10 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) plt_entry_size = GET_PLT_ENTRY_SIZE (info->output_bfd); + resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + eh->has_got_reloc, + eh); + /* Clear the reference count of function pointer relocations if symbol isn't a normal function. */ if (h->type != STT_FUNC) @@ -2376,8 +2657,9 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (h->type == STT_GNU_IFUNC && h->def_regular) return _bfd_elf_allocate_ifunc_dyn_relocs (info, h, &eh->dyn_relocs, - plt_entry_size, - plt_entry_size, 4); + &htab->readonly_dynrelocs_against_ifunc, + plt_entry_size, + plt_entry_size, 4, TRUE); /* Don't create the PLT entry if there are only function pointer relocations which can be resolved at run-time. */ else if (htab->elf.dynamic_sections_created @@ -2405,7 +2687,8 @@ elf_i386_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) + && !h->forced_local + && !resolved_to_zero) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -2462,9 +2745,15 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) script. */ htab->elf.sgotplt->size += 4; - /* We also need to make an entry in the .rel.plt section. */ - htab->elf.srelplt->size += sizeof (Elf32_External_Rel); - htab->elf.srelplt->reloc_count++; + /* There should be no PLT relocation against resolved + undefined weak symbol in executable. */ + if (!resolved_to_zero) + { + /* We also need to make an entry in the .rel.plt + section. */ + htab->elf.srelplt->size += sizeof (Elf32_External_Rel); + htab->elf.srelplt->reloc_count++; + } } if (get_elf_i386_backend_data (info->output_bfd)->is_vxworks @@ -2490,12 +2779,14 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } else { + eh->plt_got.offset = (bfd_vma) -1; h->plt.offset = (bfd_vma) -1; h->needs_plt = 0; } } else { + eh->plt_got.offset = (bfd_vma) -1; h->plt.offset = (bfd_vma) -1; h->needs_plt = 0; } @@ -2518,7 +2809,8 @@ elf_i386_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) + && !h->forced_local + && !resolved_to_zero) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -2546,7 +2838,8 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) R_386_TLS_IE resp. R_386_TLS_GOTIE needs one dynamic relocation, (but if both R_386_TLS_IE_32 and R_386_TLS_IE is present, we need two), R_386_TLS_GD needs one if local symbol and two if - global. */ + global. No dynamic relocation against resolved undefined weak + symbol in executable. */ if (tls_type == GOT_TLS_IE_BOTH) htab->elf.srelgot->size += 2 * sizeof (Elf32_External_Rel); else if ((GOT_TLS_GD_P (tls_type) && h->dynindx == -1) @@ -2555,7 +2848,8 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) else if (GOT_TLS_GD_P (tls_type)) htab->elf.srelgot->size += 2 * sizeof (Elf32_External_Rel); else if (! GOT_TLS_GDESC_P (tls_type) - && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && !resolved_to_zero) || h->root.type != bfd_link_hash_undefweak) && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) @@ -2611,15 +2905,43 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } /* Also discard relocs on undefined weak syms with non-default - visibility. */ + visibility or in PIE. */ if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { - if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + /* Undefined weak symbol is never bound locally in shared + library. */ + if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + || resolved_to_zero) + { + if (h->non_got_ref) + { + /* Keep dynamic non-GOT/non-PLT relocation so that we + can branch to 0 without PLT. */ + struct elf_dyn_relocs **pp; - /* Make sure undefined weak symbols are output as a dynamic - symbol in PIEs. */ + for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + if (p->pc_count == 0) + *pp = p->next; + else + { + /* Remove non-R_386_PC32 relocation. */ + p->count = p->pc_count; + pp = &p->next; + } + + if (eh->dyn_relocs != NULL) + { + /* Make sure undefined weak symbols are output + as dynamic symbols in PIEs for dynamic non-GOT + non-PLT reloations. */ + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + } + else + eh->dyn_relocs = NULL; + } else if (h->dynindx == -1 && !h->forced_local) { @@ -2635,7 +2957,10 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) dynamic. Keep dynamic relocations for run-time function pointer initialization. */ - if ((!h->non_got_ref || eh->func_pointer_refcount > 0) + if ((!h->non_got_ref + || eh->func_pointer_refcount > 0 + || (h->root.type == bfd_link_hash_undefweak + && !resolved_to_zero)) && ((h->def_dynamic && !h->def_regular) || (htab->elf.dynamic_sections_created @@ -2645,7 +2970,8 @@ elf_i386_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) + && !h->forced_local + && !resolved_to_zero) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -2732,36 +3058,18 @@ elf_i386_readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf) return TRUE; } -/* With the local symbol, foo, we convert - mov foo@GOT[(%reg1)], %reg2 - to - lea foo[@GOTOFF(%reg1)], %reg2 - and convert - call/jmp *foo@GOT[(%reg)] - to - nop call foo/jmp foo nop - When PIC is false, convert - test %reg1, foo@GOT[(%reg2)] - to - test $foo, %reg1 - and convert - binop foo@GOT[(%reg1)], %reg2 - to - binop $foo, %reg2 - where binop is one of adc, add, and, cmp, or, sbb, sub, xor - instructions. */ +/* Convert load via the GOT slot to load immediate. */ static bfd_boolean elf_i386_convert_load (bfd *abfd, asection *sec, struct bfd_link_info *link_info) { + struct elf_i386_link_hash_table *htab; Elf_Internal_Shdr *symtab_hdr; Elf_Internal_Rela *internal_relocs; Elf_Internal_Rela *irel, *irelend; bfd_byte *contents; - struct elf_i386_link_hash_table *htab; - bfd_boolean changed_contents; - bfd_boolean changed_relocs; + bfd_boolean changed; bfd_signed_vma *local_got_refcounts; /* Don't even try to convert non-ELF outputs. */ @@ -2783,9 +3091,8 @@ elf_i386_convert_load (bfd *abfd, asection *sec, if (internal_relocs == NULL) return FALSE; + changed = FALSE; htab = elf_i386_hash_table (link_info); - changed_contents = FALSE; - changed_relocs = FALSE; local_got_refcounts = elf_local_got_refcounts (abfd); /* Get the section contents. */ @@ -2801,249 +3108,50 @@ elf_i386_convert_load (bfd *abfd, asection *sec, for (irel = internal_relocs; irel < irelend; irel++) { unsigned int r_type = ELF32_R_TYPE (irel->r_info); - unsigned int r_symndx = ELF32_R_SYM (irel->r_info); - unsigned int indx; + unsigned int r_symndx; struct elf_link_hash_entry *h; - unsigned int opcode; - unsigned int modrm; - bfd_vma roff; - bfd_boolean baseless; - Elf_Internal_Sym *isym; - unsigned int addend; - unsigned int nop; - bfd_vma nop_offset; + bfd_boolean converted; - if (r_type != R_386_GOT32 && r_type != R_386_GOT32X) + /* Don't convert R_386_GOT32 since we can't tell if it is applied + to "mov $foo@GOT, %reg" which isn't a load via GOT. */ + if (r_type != R_386_GOT32X) continue; - roff = irel->r_offset; - if (roff < 2) - continue; - - /* Addend for R_386_GOT32 and R_386_GOT32X relocations must be 0. */ - addend = bfd_get_32 (abfd, contents + roff); - if (addend != 0) - continue; - - modrm = bfd_get_8 (abfd, contents + roff - 1); - baseless = (modrm & 0xc7) == 0x5; - - if (r_type == R_386_GOT32X - && baseless - && bfd_link_pic (link_info)) - { - /* For PIC, disallow R_386_GOT32X without a base register - since we don't know what the GOT base is. Allow - R_386_GOT32 for existing object files. */ - const char *name; - - if (r_symndx < symtab_hdr->sh_info) - { - isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, - r_symndx); - name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); - } - else - { - indx = r_symndx - symtab_hdr->sh_info; - h = elf_sym_hashes (abfd)[indx]; - BFD_ASSERT (h != NULL); - name = h->root.root.string; - } - - (*_bfd_error_handler) - (_("%B: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"), - abfd, name); - goto error_return; - } - - opcode = bfd_get_8 (abfd, contents + roff - 2); - - /* It is OK to convert mov to lea. */ - if (opcode != 0x8b) - { - /* Only convert R_386_GOT32X relocation for call, jmp or - one of adc, add, and, cmp, or, sbb, sub, test, xor - instructions. */ - if (r_type != R_386_GOT32X) - continue; - - /* It is OK to convert indirect branch to direct branch. It - is OK to convert adc, add, and, cmp, or, sbb, sub, test, - xor only when PIC is false. */ - if (opcode != 0xff && bfd_link_pic (link_info)) - continue; - } - - /* Try to convert R_386_GOT32 and R_386_GOT32X. Get the symbol - referred to by the reloc. */ + r_symndx = ELF32_R_SYM (irel->r_info); if (r_symndx < symtab_hdr->sh_info) + h = elf_i386_get_local_sym_hash (htab, sec->owner, + (const Elf_Internal_Rela *) irel, + FALSE); + else { - isym = bfd_sym_from_r_symndx (&htab->sym_cache, - abfd, r_symndx); - - /* STT_GNU_IFUNC must keep GOT32 relocations. */ - if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) - continue; - - h = NULL; - if (opcode == 0x0ff) - /* Convert "call/jmp *foo@GOT[(%reg)]". */ - goto convert_branch; - else - /* Convert "mov foo@GOT[(%reg1)], %reg2", - "test %reg1, foo@GOT(%reg2)" and - "binop foo@GOT[(%reg1)], %reg2". */ - goto convert_load; + h = elf_sym_hashes (abfd)[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; } - indx = r_symndx - symtab_hdr->sh_info; - h = elf_sym_hashes (abfd)[indx]; - BFD_ASSERT (h != NULL); - - 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; - /* STT_GNU_IFUNC must keep GOT32 relocations. */ - if (h->type == STT_GNU_IFUNC) + if (h != NULL && h->type == STT_GNU_IFUNC) continue; - if (opcode == 0xff) - { - /* We have "call/jmp *foo@GOT[(%reg)]". */ - if ((h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && SYMBOL_REFERENCES_LOCAL (link_info, h)) - { - /* The function is locally defined. */ -convert_branch: - /* Convert R_386_GOT32X to R_386_PC32. */ - if (modrm == 0x15 || (modrm & 0xf8) == 0x90) - { - /* Convert to "nop call foo". ADDR_PREFIX_OPCODE - is a nop prefix. */ - modrm = 0xe8; - nop = link_info->call_nop_byte; - if (link_info->call_nop_as_suffix) - { - nop_offset = roff + 3; - irel->r_offset -= 1; - } - else - nop_offset = roff - 2; - } - else - { - /* Convert to "jmp foo nop". */ - modrm = 0xe9; - nop = NOP_OPCODE; - nop_offset = roff + 3; - irel->r_offset -= 1; - } - - bfd_put_8 (abfd, nop, contents + nop_offset); - bfd_put_8 (abfd, modrm, contents + irel->r_offset - 1); - /* When converting to PC-relative relocation, we - need to adjust addend by -4. */ - bfd_put_32 (abfd, -4, contents + irel->r_offset); - irel->r_info = ELF32_R_INFO (r_symndx, R_386_PC32); - - if (h) - { - if (h->got.refcount > 0) - h->got.refcount -= 1; - } - else - { - if (local_got_refcounts != NULL - && local_got_refcounts[r_symndx] > 0) - local_got_refcounts[r_symndx] -= 1; - } + converted = FALSE; + if (!elf_i386_convert_load_reloc (abfd, symtab_hdr, contents, + irel, h, &converted, link_info)) + goto error_return; - changed_contents = TRUE; - changed_relocs = TRUE; - } - } - else + if (converted) { - /* We have "mov foo@GOT[(%re1g)], %reg2", - "test %reg1, foo@GOT(%reg2)" and - "binop foo@GOT[(%reg1)], %reg2". - - Avoid optimizing _DYNAMIC since ld.so may use its - link-time address. */ - if (h == htab->elf.hdynamic) - continue; - - /* def_regular is set by an assignment in a linker script in - bfd_elf_record_link_assignment. */ - if ((h->def_regular - || h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && SYMBOL_REFERENCES_LOCAL (link_info, h)) + changed = converted; + if (h) { -convert_load: - if (opcode == 0x8b) - { - /* Convert "mov foo@GOT(%reg1), %reg2" to - "lea foo@GOTOFF(%reg1), %reg2". */ - if (r_type == R_386_GOT32X - && (baseless || !bfd_link_pic (link_info))) - { - r_type = R_386_32; - /* For R_386_32, convert - "lea foo@GOTOFF(%reg1), %reg2" to - "lea foo@GOT, %reg2". */ - if (!baseless) - { - modrm = 0x5 | (modrm & 0x38); - bfd_put_8 (abfd, modrm, contents + roff - 1); - } - } - else - r_type = R_386_GOTOFF; - opcode = 0x8d; - } - else - { - if (opcode == 0x85) - { - /* Convert "test %reg1, foo@GOT(%reg2)" to - "test $foo, %reg1". */ - modrm = 0xc0 | (modrm & 0x38) >> 3; - opcode = 0xf7; - } - else - { - /* Convert "binop foo@GOT(%reg1), %reg2" to - "binop $foo, %reg2". */ - modrm = (0xc0 - | (modrm & 0x38) >> 3 - | (opcode & 0x3c)); - opcode = 0x81; - } - bfd_put_8 (abfd, modrm, contents + roff - 1); - r_type = R_386_32; - } - - bfd_put_8 (abfd, opcode, contents + roff - 2); - irel->r_info = ELF32_R_INFO (r_symndx, r_type); - - if (h) - { - if (h->got.refcount > 0) - h->got.refcount -= 1; - } - else - { - if (local_got_refcounts != NULL - && local_got_refcounts[r_symndx] > 0) - local_got_refcounts[r_symndx] -= 1; - } - - changed_contents = TRUE; - changed_relocs = TRUE; + if (h->got.refcount > 0) + h->got.refcount -= 1; + } + else + { + if (local_got_refcounts != NULL + && local_got_refcounts[r_symndx] > 0) + local_got_refcounts[r_symndx] -= 1; } } } @@ -3051,7 +3159,7 @@ convert_load: if (contents != NULL && elf_section_data (sec)->this_hdr.contents != contents) { - if (!changed_contents && !link_info->keep_memory) + if (!changed && !link_info->keep_memory) free (contents); else { @@ -3062,7 +3170,7 @@ convert_load: if (elf_section_data (sec)->relocs != internal_relocs) { - if (!changed_relocs) + if (!changed) free (internal_relocs); else elf_section_data (sec)->relocs = internal_relocs; @@ -3098,19 +3206,6 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) if (dynobj == NULL) abort (); - if (htab->elf.dynamic_sections_created) - { - /* Set the contents of the .interp section to the interpreter. */ - if (bfd_link_executable (info) && !info->nointerp) - { - s = bfd_get_linker_section (dynobj, ".interp"); - if (s == NULL) - abort (); - 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) @@ -3419,8 +3514,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) if ((info->flags & DF_TEXTREL) != 0) { - if ((elf_tdata (output_bfd)->has_gnu_symbols - & elf_gnu_symbol_ifunc) == elf_gnu_symbol_ifunc) + if (htab->readonly_dynrelocs_against_ifunc) { info->callbacks->einfo (_("%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n")); @@ -3601,6 +3695,10 @@ elf_i386_relocate_section (bfd *output_bfd, BFD_ASSERT (is_i386_elf (input_bfd)); + /* Skip if check_relocs failed. */ + if (input_section->check_relocs_failed) + return FALSE; + htab = elf_i386_hash_table (info); if (htab == NULL) return FALSE; @@ -3638,6 +3736,7 @@ elf_i386_relocate_section (bfd *output_bfd, int tls_type; bfd_vma st_size; asection *resolved_plt; + bfd_boolean resolved_to_zero; r_type = ELF32_R_TYPE (rel->r_info); if (r_type == R_386_GNU_VTINHERIT @@ -3815,8 +3914,6 @@ elf_i386_relocate_section (bfd *output_bfd, continue; abort (); } - else if (h->plt.offset == (bfd_vma) -1) - abort (); /* STT_GNU_IFUNC symbol must go through PLT. */ if (htab->elf.splt != NULL) @@ -3830,12 +3927,106 @@ elf_i386_relocate_section (bfd *output_bfd, gotplt = htab->elf.igotplt; } + switch (r_type) + { + default: + break; + + case R_386_GOT32: + case R_386_GOT32X: + 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 (h->plt.offset == (bfd_vma) -1) + abort (); + + 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; + } + else + relocation = (base_got->output_section->vma + + base_got->output_offset + off + - gotplt->output_section->vma + - gotplt->output_offset); + + if ((*(contents + rel->r_offset - 1) & 0xc7) == 0x5) + { + if (bfd_link_pic (info)) + goto disallow_got32; + + /* Add the GOT base if there is no base register. */ + relocation += (gotplt->output_section->vma + + gotplt->output_offset); + } + else if (htab->elf.splt == NULL) + { + /* Adjust for static executables. */ + relocation += gotplt->output_offset; + } + + goto do_relocation; + } + + if (h->plt.offset == (bfd_vma) -1) + { + /* Handle static pointers of STT_GNU_IFUNC symbols. */ + if (r_type == R_386_32 + && (input_section->flags & SEC_CODE) == 0) + goto do_ifunc_pointer; + goto bad_ifunc_reloc; + } + relocation = (plt->output_section->vma + plt->output_offset + h->plt.offset); switch (r_type) { default: +bad_ifunc_reloc: if (h->root.root.string) name = h->root.root.string; else @@ -3843,21 +4034,22 @@ elf_i386_relocate_section (bfd *output_bfd, 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__); + "symbol `%s' isn't supported"), input_bfd, + howto->name, name); bfd_set_error (bfd_error_bad_value); return FALSE; case R_386_32: /* Generate dynamic relcoation only when there is a non-GOT reference in a shared object. */ - if (bfd_link_pic (info) && h->non_got_ref) + if ((bfd_link_pic (info) && h->non_got_ref) + || h->plt.offset == (bfd_vma) -1) { Elf_Internal_Rela outrel; asection *sreloc; bfd_vma offset; +do_ifunc_pointer: /* Need a dynamic relocation to get the real function adddress. */ offset = _bfd_elf_section_offset (output_bfd, @@ -3887,7 +4079,16 @@ elf_i386_relocate_section (bfd *output_bfd, else outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); - sreloc = htab->elf.irelifunc; + /* Dynamic relocations are stored in + 1. .rel.ifunc section in PIC object. + 2. .rel.got section in dynamic executable. + 3. .rel.iplt section in static executable. */ + if (bfd_link_pic (info)) + sreloc = htab->elf.irelifunc; + else if (htab->elf.splt != NULL) + sreloc = htab->elf.srelgot; + else + sreloc = htab->elf.irelplt; elf_append_rel (output_bfd, sreloc, &outrel); /* If this reloc is against an external symbol, we @@ -3902,75 +4103,6 @@ elf_i386_relocate_section (bfd *output_bfd, case R_386_PLT32: goto do_relocation; - case R_386_GOT32: - case R_386_GOT32X: - 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); @@ -3979,6 +4111,11 @@ elf_i386_relocate_section (bfd *output_bfd, } eh = (struct elf_i386_link_hash_entry *) h; + resolved_to_zero = (eh != NULL + && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + eh->has_got_reloc, + eh)); + switch (r_type) { case R_386_GOT32X: @@ -4016,10 +4153,12 @@ elf_i386_relocate_section (bfd *output_bfd, /* It is relative to .got.plt section. */ if (h->got.offset != (bfd_vma) -1) - /* Use GOT entry. */ + /* Use GOT entry. Mask off the least significant bit in + GOT offset which may be set by R_386_GOT32 processing + below. */ relocation = (htab->elf.sgot->output_section->vma + htab->elf.sgot->output_offset - + h->got.offset - offplt); + + (h->got.offset & ~1) - offplt); else /* Use GOTPLT entry. */ relocation = (h->plt.offset / plt_entry_size - 1 + 3) * 4; @@ -4122,10 +4261,39 @@ r_386_got32: if (off >= (bfd_vma) -2) abort (); - relocation = htab->elf.sgot->output_section->vma - + htab->elf.sgot->output_offset + off - - htab->elf.sgotplt->output_section->vma - - htab->elf.sgotplt->output_offset; + relocation = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off); + if ((*(contents + rel->r_offset - 1) & 0xc7) == 0x5) + { + if (bfd_link_pic (info)) + { + /* For PIC, disallow R_386_GOT32 without a base + register since we don't know what the GOT base + is. */ + const char *name; + +disallow_got32: + if (h == NULL) + name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, + NULL); + else + name = h->root.root.string; + + (*_bfd_error_handler) + (_("%B: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"), + input_bfd, howto->name, name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + } + else + { + /* Subtract the .got.plt section address only with a base + register. */ + relocation -= (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset); + } + break; case R_386_GOTOFF: @@ -4242,22 +4410,29 @@ r_386_got32: || is_vxworks_tls) break; - /* Copy dynamic function pointer relocations. */ + /* Copy dynamic function pointer relocations. Don't generate + dynamic relocations against resolved undefined weak symbols + in PIE, except for R_386_PC32. */ if ((bfd_link_pic (info) && (h == NULL - || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak) + || ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && (!resolved_to_zero + || r_type == R_386_PC32)) + || h->root.type != bfd_link_hash_undefweak)) && ((r_type != R_386_PC32 && r_type != R_386_SIZE32) || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS && !bfd_link_pic (info) && h != NULL && h->dynindx != -1 - && (!h->non_got_ref || eh->func_pointer_refcount > 0) - && ((h->def_dynamic - && !h->def_regular) - || h->root.type == bfd_link_hash_undefweak - || h->root.type == bfd_link_hash_undefined))) + && (!h->non_got_ref + || eh->func_pointer_refcount > 0 + || (h->root.type == bfd_link_hash_undefweak + && !resolved_to_zero)) + && ((h->def_dynamic && !h->def_regular) + /* Undefined weak symbol is bound locally when + PIC is false. */ + || h->root.type == bfd_link_hash_undefweak))) { Elf_Internal_Rela outrel; bfd_boolean skip, relocate; @@ -4285,8 +4460,8 @@ r_386_got32: else if (h != NULL && h->dynindx != -1 && (r_type == R_386_PC32 - || !bfd_link_pic (info) - || !SYMBOLIC_BIND (info, h) + || !(bfd_link_executable (info) + || SYMBOLIC_BIND (info, h)) || !h->def_regular)) outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); else @@ -4349,7 +4524,7 @@ r_386_got32: input_section, contents, symtab_hdr, sym_hashes, &r_type, tls_type, rel, - relend, h, r_symndx)) + relend, h, r_symndx, TRUE)) return FALSE; if (r_type == R_386_TLS_LE_32) @@ -4361,30 +4536,39 @@ r_386_got32: bfd_vma roff; /* GD->LE transition. */ - type = bfd_get_8 (input_bfd, contents + rel->r_offset - 2); + type = *(contents + rel->r_offset - 2); if (type == 0x04) { - /* leal foo(,%reg,1), %eax; call ___tls_get_addr - Change it into: - movl %gs:0, %eax; subl $foo@tpoff, %eax + /* Change + leal foo@tlsgd(,%ebx,1), %eax + call ___tls_get_addr@PLT + into: + movl %gs:0, %eax + subl $foo@tpoff, %eax (6 byte form of subl). */ - memcpy (contents + rel->r_offset - 3, - "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12); roff = rel->r_offset + 5; } else { - /* leal foo(%reg), %eax; call ___tls_get_addr; nop - Change it into: - movl %gs:0, %eax; subl $foo@tpoff, %eax + /* Change + leal foo@tlsgd(%ebx), %eax + call ___tls_get_addr@PLT + nop + or + leal foo@tlsgd(%reg), %eax + call *___tls_get_addr@GOT(%reg) + which may be converted to + addr32 call ___tls_get_addr + 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; } + memcpy (contents + roff - 8, + "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12); bfd_put_32 (output_bfd, elf_i386_tpoff (info, relocation), contents + roff); - /* Skip R_386_PC32/R_386_PLT32. */ + /* Skip R_386_PC32, R_386_PLT32 and R_386_GOT32X. */ rel++; wrel++; continue; @@ -4691,21 +4875,33 @@ r_386_got32: bfd_vma roff; /* GD->IE transition. */ - type = bfd_get_8 (input_bfd, contents + rel->r_offset - 2); - val = bfd_get_8 (input_bfd, contents + rel->r_offset - 1); + type = *(contents + rel->r_offset - 2); + val = *(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. */ + /* Change + leal foo@tlsgd(,%ebx,1), %eax + call ___tls_get_addr@PLT + into: + movl %gs:0, %eax + subl $foo@gottpoff(%ebx), %eax. */ 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. */ + /* Change + leal foo@tlsgd(%ebx), %eax + call ___tls_get_addr@PLT + nop + or + leal foo@tlsgd(%reg), %eax + call *___tls_get_addr@GOT(%reg) + which may be converted to + addr32 call ___tls_get_addr + into: + movl %gs:0, %eax; + subl $foo@gottpoff(%reg), %eax. */ roff = rel->r_offset - 2; } memcpy (contents + roff, @@ -4724,7 +4920,7 @@ r_386_got32: - htab->elf.sgotplt->output_section->vma - htab->elf.sgotplt->output_offset, contents + roff + 8); - /* Skip R_386_PLT32. */ + /* Skip R_386_PLT32 and R_386_GOT32X. */ rel++; wrel++; continue; @@ -4810,18 +5006,34 @@ r_386_got32: input_section, contents, symtab_hdr, sym_hashes, &r_type, GOT_UNKNOWN, rel, - relend, h, r_symndx)) + relend, h, r_symndx, TRUE)) return FALSE; if (r_type != R_386_TLS_LDM) { - /* LD->LE transition: - leal foo(%reg), %eax; call ___tls_get_addr. - We change it into: - movl %gs:0, %eax; nop; leal 0(%esi,1), %esi. */ + /* LD->LE transition. Change + leal foo@tlsldm(%ebx) %eax + call ___tls_get_addr@PLT + into: + movl %gs:0, %eax + nop + leal 0(%esi,1), %esi + or change + leal foo@tlsldm(%reg) %eax + call *___tls_get_addr@GOT(%reg) + which may be converted to + addr32 call ___tls_get_addr + into: + movl %gs:0, %eax + leal 0(%esi), %esi */ 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); + if (*(contents + rel->r_offset + 4) == 0xff + || *(contents + rel->r_offset + 4) == 0x67) + memcpy (contents + rel->r_offset - 2, + "\x65\xa1\0\0\0\0\x8d\xb6\0\0\0", 12); + else + memcpy (contents + rel->r_offset - 2, + "\x65\xa1\0\0\0\0\x90\x8d\x74\x26", 11); /* Skip R_386_PC32/R_386_PLT32. */ rel++; wrel++; @@ -4950,13 +5162,9 @@ check_relocation_error: } 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; - } + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); else { (*_bfd_error_handler) @@ -5007,6 +5215,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, unsigned plt_entry_size; const struct elf_i386_backend_data *abed; struct elf_i386_link_hash_entry *eh; + bfd_boolean local_undefweak; htab = elf_i386_hash_table (info); if (htab == NULL) @@ -5017,6 +5226,13 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, eh = (struct elf_i386_link_hash_entry *) h; + /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for + resolved undefined weak symbols in executable so that their + references have value 0 at run-time. */ + local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + eh->has_got_reloc, + eh); + if (h->plt.offset != (bfd_vma) -1) { bfd_vma plt_index; @@ -5044,6 +5260,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, it up. */ if ((h->dynindx == -1 + && !local_undefweak && !((h->forced_local || bfd_link_executable (info)) && h->def_regular && h->type == STT_GNU_IFUNC)) @@ -5132,54 +5349,61 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, + abed->plt->plt_got_offset); } - /* Fill in the entry in the global offset table. */ - bfd_put_32 (output_bfd, - (plt->output_section->vma - + plt->output_offset - + h->plt.offset - + abed->plt->plt_lazy_offset), - gotplt->contents + got_offset); - - /* Fill in the entry in the .rel.plt section. */ - rel.r_offset = (gotplt->output_section->vma - + gotplt->output_offset - + got_offset); - if (h->dynindx == -1 - || ((bfd_link_executable (info) - || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - && h->def_regular - && h->type == STT_GNU_IFUNC)) + /* Fill in the entry in the global offset table. Leave the entry + as zero for undefined weak symbol in PIE. No PLT relocation + against undefined weak symbol in PIE. */ + if (!local_undefweak) { - /* 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), + (plt->output_section->vma + + plt->output_offset + + h->plt.offset + + abed->plt->plt_lazy_offset), gotplt->contents + got_offset); - rel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE); - /* R_386_IRELATIVE comes last. */ - plt_index = htab->next_irelative_index--; - } - else - { - rel.r_info = ELF32_R_INFO (h->dynindx, R_386_JUMP_SLOT); - plt_index = htab->next_jump_slot_index++; - } - loc = relplt->contents + plt_index * sizeof (Elf32_External_Rel); - bfd_elf32_swap_reloc_out (output_bfd, &rel, loc); - /* 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 - + abed->plt->plt_reloc_offset); - bfd_put_32 (output_bfd, - (h->plt.offset - + abed->plt->plt_plt_offset + 4), - plt->contents + h->plt.offset - + abed->plt->plt_plt_offset); + /* Fill in the entry in the .rel.plt section. */ + rel.r_offset = (gotplt->output_section->vma + + gotplt->output_offset + + got_offset); + if (h->dynindx == -1 + || ((bfd_link_executable (info) + || 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); + /* R_386_IRELATIVE comes last. */ + plt_index = htab->next_irelative_index--; + } + else + { + rel.r_info = ELF32_R_INFO (h->dynindx, R_386_JUMP_SLOT); + plt_index = htab->next_jump_slot_index++; + } + + loc = relplt->contents + plt_index * sizeof (Elf32_External_Rel); + bfd_elf32_swap_reloc_out (output_bfd, &rel, loc); + + /* 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 + + abed->plt->plt_reloc_offset); + bfd_put_32 (output_bfd, - (h->plt.offset + + abed->plt->plt_plt_offset + 4), + plt->contents + h->plt.offset + + abed->plt->plt_plt_offset); + } } } else if (eh->plt_got.offset != (bfd_vma) -1) @@ -5225,7 +5449,8 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, plt->contents + plt_offset + plt_got_offset); } - if (!h->def_regular + if (!local_undefweak + && !h->def_regular && (h->plt.offset != (bfd_vma) -1 || eh->plt_got.offset != (bfd_vma) -1)) { @@ -5242,11 +5467,15 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, sym->st_value = 0; } + /* Don't generate dynamic GOT relocation against undefined weak + symbol in executable. */ if (h->got.offset != (bfd_vma) -1 && ! GOT_TLS_GD_ANY_P (elf_i386_hash_entry(h)->tls_type) - && (elf_i386_hash_entry(h)->tls_type & GOT_TLS_IE) == 0) + && (elf_i386_hash_entry(h)->tls_type & GOT_TLS_IE) == 0 + && !local_undefweak) { Elf_Internal_Rela rel; + asection *relgot = htab->elf.srelgot; /* This symbol has an entry in the global offset table. Set it up. */ @@ -5266,7 +5495,28 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, if (h->def_regular && h->type == STT_GNU_IFUNC) { - if (bfd_link_pic (info)) + if (h->plt.offset == (bfd_vma) -1) + { + /* STT_GNU_IFUNC is referenced without PLT. */ + if (htab->elf.splt == NULL) + { + /* use .rel[a].iplt section to store .got relocations + in static executable. */ + relgot = htab->elf.irelplt; + } + if (SYMBOL_REFERENCES_LOCAL (info, h)) + { + 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), + htab->elf.sgot->contents + h->got.offset); + rel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE); + } + else + goto do_glob_dat; + } + else if (bfd_link_pic (info)) { /* Generate R_386_GLOB_DAT. */ goto do_glob_dat; @@ -5304,7 +5554,7 @@ do_glob_dat: rel.r_info = ELF32_R_INFO (h->dynindx, R_386_GLOB_DAT); } - elf_append_rel (output_bfd, htab->elf.srelgot, &rel); + elf_append_rel (output_bfd, relgot, &rel); } if (h->needs_copy) @@ -5344,6 +5594,25 @@ elf_i386_finish_local_dynamic_symbol (void **slot, void *inf) h, NULL); } +/* Finish up undefined weak symbol handling in PIE. Fill its PLT entry + here since undefined weak symbol may not be dynamic and may not be + called for elf_i386_finish_dynamic_symbol. */ + +static bfd_boolean +elf_i386_pie_finish_undefweak_symbol (struct bfd_hash_entry *bh, + void *inf) +{ + struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh; + struct bfd_link_info *info = (struct bfd_link_info *) inf; + + if (h->root.type != bfd_link_hash_undefweak + || h->dynindx != -1) + return TRUE; + + 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. */ @@ -5362,19 +5631,24 @@ elf_i386_reloc_type_class (const struct bfd_link_info *info, /* Check relocation against STT_GNU_IFUNC symbol if there are dynamic symbols. */ unsigned long r_symndx = ELF32_R_SYM (rela->r_info); - Elf_Internal_Sym sym; - if (!bed->s->swap_symbol_in (abfd, - (htab->dynsym->contents - + r_symndx * sizeof (Elf32_External_Sym)), - 0, &sym)) - abort (); + if (r_symndx != STN_UNDEF) + { + Elf_Internal_Sym sym; + if (!bed->s->swap_symbol_in (abfd, + (htab->dynsym->contents + + r_symndx * sizeof (Elf32_External_Sym)), + 0, &sym)) + abort (); - if (ELF32_ST_TYPE (sym.st_info) == STT_GNU_IFUNC) - return reloc_class_ifunc; + if (ELF32_ST_TYPE (sym.st_info) == STT_GNU_IFUNC) + return reloc_class_ifunc; + } } switch (ELF32_R_TYPE (rela->r_info)) { + case R_386_IRELATIVE: + return reloc_class_ifunc; case R_386_RELATIVE: return reloc_class_relative; case R_386_JUMP_SLOT: @@ -5617,6 +5891,34 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, if (htab->elf.sgot && htab->elf.sgot->size > 0) elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = 4; + /* Fill PLT entries for undefined weak symbols in PIE. */ + if (bfd_link_pie (info)) + bfd_hash_traverse (&info->hash->table, + elf_i386_pie_finish_undefweak_symbol, + info); + + return TRUE; +} + +/* Fill PLT/GOT entries and allocate dynamic relocations for local + STT_GNU_IFUNC symbols, which aren't in the ELF linker hash table. + It has to be done before elf_link_sort_relocs is called so that + dynamic relocations are properly sorted. */ + +static bfd_boolean +elf_i386_output_arch_local_syms + (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info, + void *flaginfo ATTRIBUTE_UNUSED, + int (*func) (void *, const char *, + Elf_Internal_Sym *, + asection *, + struct elf_link_hash_entry *) ATTRIBUTE_UNUSED) +{ + struct elf_i386_link_hash_table *htab = elf_i386_hash_table (info); + if (htab == NULL) + return FALSE; + /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols. */ htab_traverse (htab->loc_hash_table, elf_i386_finish_local_dynamic_symbol, @@ -5730,27 +6032,6 @@ 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, - struct bfd_link_info * info, - 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_BIND (sym->st_info) == STB_GNU_UNIQUE - && (abfd->flags & DYNAMIC) == 0 - && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols - |= elf_gnu_symbol_unique; - - return TRUE; -} - #define TARGET_LITTLE_SYM i386_elf32_vec #define TARGET_LITTLE_NAME "elf32-i386" #define ELF_ARCH bfd_arch_i386 @@ -5766,6 +6047,7 @@ elf_i386_add_symbol_hook (bfd * abfd, #define elf_backend_got_header_size 12 #define elf_backend_plt_alignment 4 #define elf_backend_extern_protected_data 1 +#define elf_backend_caches_rawsize 1 /* Support RELA for objdump of prelink objects. */ #define elf_info_to_howto elf_i386_info_to_howto_rel @@ -5787,8 +6069,8 @@ elf_i386_add_symbol_hook (bfd * abfd, #define elf_backend_fake_sections elf_i386_fake_sections #define elf_backend_finish_dynamic_sections elf_i386_finish_dynamic_sections #define elf_backend_finish_dynamic_symbol elf_i386_finish_dynamic_symbol +#define elf_backend_output_arch_local_syms elf_i386_output_arch_local_syms #define elf_backend_gc_mark_hook elf_i386_gc_mark_hook -#define elf_backend_gc_sweep_hook elf_i386_gc_sweep_hook #define elf_backend_grok_prstatus elf_i386_grok_prstatus #define elf_backend_grok_psinfo elf_i386_grok_psinfo #define elf_backend_reloc_type_class elf_i386_reloc_type_class @@ -5798,7 +6080,7 @@ elf_i386_add_symbol_hook (bfd * abfd, #define elf_backend_omit_section_dynsym \ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true) #define elf_backend_hash_symbol elf_i386_hash_symbol -#define elf_backend_add_symbol_hook elf_i386_add_symbol_hook +#define elf_backend_fixup_symbol elf_i386_fixup_symbol #include "elf32-target.h" @@ -5856,16 +6138,99 @@ elf_i386_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) /* The 32-bit static TLS arena size is rounded to the nearest 8-byte boundary. */ -#undef elf_backend_static_tls_alignment +#undef elf_backend_static_tls_alignment #define elf_backend_static_tls_alignment 8 /* The Solaris 2 ABI requires a plt symbol on all platforms. Cf. Linker and Libraries Guide, Ch. 2, Link-Editor, Generating the Output File, p.63. */ -#undef elf_backend_want_plt_sym +#undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 1 +#undef elf_backend_strtab_flags +#define elf_backend_strtab_flags SHF_STRINGS + +/* Called to set the sh_flags, sh_link and sh_info fields of OSECTION which + has a type >= SHT_LOOS. Returns TRUE if these fields were initialised + FALSE otherwise. ISECTION is the best guess matching section from the + input bfd IBFD, but it might be NULL. */ + +static bfd_boolean +elf32_i386_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED, + Elf_Internal_Shdr *osection ATTRIBUTE_UNUSED) +{ + /* PR 19938: FIXME: Need to add code for setting the sh_info + and sh_link fields of Solaris specific section types. */ + return FALSE; + + /* Based upon Oracle Solaris 11.3 Linkers and Libraries Guide, Ch. 13, + Object File Format, Table 13-9 ELF sh_link and sh_info Interpretation: + +http://docs.oracle.com/cd/E53394_01/html/E54813/chapter6-94076.html#scrolltoc + + The following values should be set: + +Type Link Info +----------------------------------------------------------------------------- +SHT_SUNW_ancillary The section header index of 0 + [0x6fffffee] the associated string table. + +SHT_SUNW_capinfo The section header index of For a dynamic object, the + [0x6ffffff0] the associated symbol table. section header index of + the associated + SHT_SUNW_capchain table, + otherwise 0. + +SHT_SUNW_symsort The section header index of 0 + [0x6ffffff1] the associated symbol table. + +SHT_SUNW_tlssort The section header index of 0 + [0x6ffffff2] the associated symbol table. + +SHT_SUNW_LDYNSYM The section header index of One greater than the + [0x6ffffff3] the associated string table. symbol table index of the + This index is the same string last local symbol, + table used by the SHT_DYNSYM STB_LOCAL. Since + section. SHT_SUNW_LDYNSYM only + contains local symbols, + sh_info is equivalent to + the number of symbols in + the table. + +SHT_SUNW_cap If symbol capabilities exist, If any capabilities refer + [0x6ffffff5] the section header index of to named strings, the + the associated section header index of + SHT_SUNW_capinfo table, the associated string + otherwise 0. table, otherwise 0. + +SHT_SUNW_move The section header index of 0 + [0x6ffffffa] the associated symbol table. + +SHT_SUNW_COMDAT 0 0 + [0x6ffffffb] + +SHT_SUNW_syminfo The section header index of The section header index + [0x6ffffffc] the associated symbol table. of the associated + .dynamic section. + +SHT_SUNW_verdef The section header index of The number of version + [0x6ffffffd] the associated string table. definitions within the + section. + +SHT_SUNW_verneed The section header index of The number of version + [0x6ffffffe] the associated string table. dependencies within the + section. + +SHT_SUNW_versym The section header index of 0 + [0x6fffffff] the associated symbol table. */ +} + +#undef elf_backend_copy_special_section_fields +#define elf_backend_copy_special_section_fields elf32_i386_copy_solaris_special_section_fields + #include "elf32-target.h" /* Intel MCU support. */ @@ -5882,7 +6247,7 @@ elf32_iamcu_elf_object_p (bfd *abfd) #define TARGET_LITTLE_SYM iamcu_elf32_vec #undef TARGET_LITTLE_NAME #define TARGET_LITTLE_NAME "elf32-iamcu" -#undef ELF_ARCH +#undef ELF_ARCH #define ELF_ARCH bfd_arch_iamcu #undef ELF_MACHINE_CODE @@ -5901,6 +6266,9 @@ elf32_iamcu_elf_object_p (bfd *abfd) #undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 0 +#undef elf_backend_strtab_flags +#undef elf_backend_copy_special_section_fields + #include "elf32-target.h" /* Restore defaults. */ diff --git a/bfd/elf32-i860.c b/bfd/elf32-i860.c index 371bf94..089d831 100644 --- a/bfd/elf32-i860.c +++ b/bfd/elf32-i860.c @@ -1196,13 +1196,13 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -1224,11 +1224,8 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-ip2k.c b/bfd/elf32-ip2k.c index 97cb633..820e146 100644 --- a/bfd/elf32-ip2k.c +++ b/bfd/elf32-ip2k.c @@ -1458,13 +1458,13 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -1489,11 +1489,8 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-iq2000.c b/bfd/elf32-iq2000.c index 642c929..0f7a75d 100644 --- a/bfd/elf32-iq2000.c +++ b/bfd/elf32-iq2000.c @@ -678,13 +678,13 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -706,11 +706,8 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-lm32.c b/bfd/elf32-lm32.c index a1aecc7..0c79397 100644 --- a/bfd/elf32-lm32.c +++ b/bfd/elf32-lm32.c @@ -1149,17 +1149,14 @@ lm32_elf_relocate_section (bfd *output_bfd, 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; + (*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: - if (! ((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -1179,10 +1176,8 @@ lm32_elf_relocate_section (bfd *output_bfd, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } @@ -1456,19 +1451,17 @@ lm32_elf_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTGOT: - s = htab->sgot->output_section; + s = htab->sgotplt; goto get_vma; case DT_JMPREL: - s = htab->srelplt->output_section; + s = htab->srelplt; get_vma: - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_PLTRELSZ: - s = htab->srelplt->output_section; - BFD_ASSERT (s != NULL); + s = htab->srelplt; dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -1485,7 +1478,7 @@ lm32_elf_finish_dynamic_sections (bfd *output_bfd, about changing the DT_RELA entry. */ if (htab->srelplt != NULL) { - s = htab->srelplt->output_section; + s = htab->srelplt; dyn.d_un.d_val -= s->size; } bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c index 8436fb1..635d664 100644 --- a/bfd/elf32-m32c.c +++ b/bfd/elf32-m32c.c @@ -478,12 +478,9 @@ m32c_elf_relocate_section else if (h->root.type == bfd_link_hash_undefweak) ; else if (!bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, - input_section, rel->r_offset, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) (info, h->root.root.string, + input_bfd, input_section, + rel->r_offset, TRUE); } if (sec != NULL && discarded_section (sec)) @@ -613,15 +610,14 @@ m32c_elf_relocate_section switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -642,11 +638,8 @@ m32c_elf_relocate_section } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index d7d5241..7034c3d 100644 --- a/bfd/elf32-m32r.c +++ b/bfd/elf32-m32r.c @@ -2580,14 +2580,11 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; else if (!bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, - input_section, offset, - (info->unresolved_syms_in_objects == RM_GENERATE_ERROR - || ELF_ST_VISIBILITY (h->other))))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, + input_section, offset, + (info->unresolved_syms_in_objects == RM_GENERATE_ERROR + || ELF_ST_VISIBILITY (h->other))); } if (sec != NULL && discarded_section (sec)) @@ -3062,17 +3059,14 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, 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; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, offset); break; case bfd_reloc_undefined: - if (! ((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, offset, TRUE); break; case bfd_reloc_outofrange: @@ -3092,10 +3086,8 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, errmsg, name, input_bfd, input_section, - offset))) - return FALSE; + (*info->callbacks->warning) (info, errmsg, name, input_bfd, + input_section, offset); break; } } @@ -3353,19 +3345,17 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTGOT: - s = htab->sgot->output_section; + s = htab->sgotplt; goto get_vma; case DT_JMPREL: - s = htab->srelplt->output_section; + s = htab->srelplt; get_vma: - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_PLTRELSZ: - s = htab->srelplt->output_section; - BFD_ASSERT (s != NULL); + s = htab->srelplt; dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -3382,7 +3372,7 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd, about changing the DT_RELA entry. */ if (htab->srelplt != NULL) { - s = htab->srelplt->output_section; + s = htab->srelplt; dyn.d_un.d_val -= s->size; } bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c index 76c9783..4824fde 100644 --- a/bfd/elf32-m68hc1x.c +++ b/bfd/elf32-m68hc1x.c @@ -28,7 +28,7 @@ #include "elf32-m68hc1x.h" #include "elf/m68hc11.h" #include "opcode/m68hc11.h" - +#include "libiberty.h" #define m68hc12_stub_hash_lookup(table, string, create, copy) \ ((struct elf32_m68hc11_stub_hash_entry *) \ @@ -592,13 +592,13 @@ m68hc11_elf_export_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) result = (* htab->build_one_stub) (gen_entry, in_arg); /* Make a printable name that does not conflict with the real function. */ - name = alloca (strlen (stub_entry->root.string) + 16); - sprintf (name, "tramp.%s", stub_entry->root.string); + name = concat ("tramp.", stub_entry->root.string, NULL); /* Export the symbol for debugging/disassembling. */ m68hc11_elf_set_symbol (htab->stub_bfd, info, name, stub_entry->stub_offset, stub_entry->stub_sec); + free (name); return result; } @@ -956,6 +956,8 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, bfd_boolean is_section_symbol = FALSE; struct elf_link_hash_entry *h; bfd_vma val; + const char * msg; + char * buf; r_symndx = ELF32_R_SYM (rel->r_info); r_type = ELF32_R_TYPE (rel->r_info); @@ -1113,15 +1115,14 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, /* Get virtual address of instruction having the relocation. */ if (is_far) { - const char* msg; - char* buf; msg = _("Reference to the far symbol `%s' using a wrong " "relocation may result in incorrect execution"); - buf = alloca (strlen (msg) + strlen (name) + 10); + buf = xmalloc (strlen (msg) + strlen (name) + 10); sprintf (buf, msg, name); - (* info->callbacks->warning) - (info, buf, name, input_bfd, NULL, rel->r_offset); + (*info->callbacks->warning) + (info, buf, name, input_bfd, NULL, rel->r_offset); + free (buf); } /* Get virtual address of instruction having the relocation. */ @@ -1148,18 +1149,15 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, } else { - const char * msg; - char * buf; - msg = _("XGATE address (%lx) is not within shared RAM" "(0xE000-0xFFFF), therefore you must manually offset " "the address, and possibly manage the page, in your " "code."); - buf = alloca (strlen (msg) + 128); + buf = xmalloc (strlen (msg) + 128); sprintf (buf, msg, phys_addr); - if (!((*info->callbacks->warning) (info, buf, name, input_bfd, - input_section, insn_addr))) - return FALSE; + (*info->callbacks->warning) (info, buf, name, input_bfd, + input_section, insn_addr); + free (buf); break; } } @@ -1168,39 +1166,28 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, && m68hc11_addr_is_banked (pinfo, insn_addr) && phys_page != insn_page && !(e_flags & E_M68HC11_NO_BANK_WARNING)) { - const char * msg; - char * buf; - msg = _("banked address [%lx:%04lx] (%lx) is not in the same bank " "as current banked address [%lx:%04lx] (%lx)"); - - buf = alloca (strlen (msg) + 128); + buf = xmalloc (strlen (msg) + 128); sprintf (buf, msg, phys_page, phys_addr, (long) (relocation + rel->r_addend), insn_page, m68hc11_phys_addr (pinfo, insn_addr), (long) (insn_addr)); - if (!((*info->callbacks->warning) - (info, buf, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, buf, name, input_bfd, + input_section, rel->r_offset); + free (buf); break; } if (phys_page != 0 && insn_page == 0) { - const char * msg; - char * buf; - msg = _("reference to a banked address [%lx:%04lx] in the " "normal address space at %04lx"); - - buf = alloca (strlen (msg) + 128); + buf = xmalloc (strlen (msg) + 128); sprintf (buf, msg, phys_page, phys_addr, insn_addr); - if (!((*info->callbacks->warning) - (info, buf, name, input_bfd, input_section, - insn_addr))) - return FALSE; - + (*info->callbacks->warning) (info, buf, name, input_bfd, + input_section, insn_addr); + free (buf); relocation = phys_addr; break; } @@ -1231,9 +1218,6 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, relocation += 0xC000; else { - const char * msg; - char * buf; - /* Get virtual address of instruction having the relocation. */ insn_addr = input_section->output_section->vma + input_section->output_offset + rel->r_offset; @@ -1241,11 +1225,11 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, msg = _("S12 address (%lx) is not within shared RAM" "(0x2000-0x4000), therefore you must manually " "offset the address in your code"); - buf = alloca (strlen (msg) + 128); + buf = xmalloc (strlen (msg) + 128); sprintf (buf, msg, phys_addr); - if (!((*info->callbacks->warning) (info, buf, name, input_bfd, - input_section, insn_addr))) - return FALSE; + (*info->callbacks->warning) (info, buf, name, input_bfd, + input_section, insn_addr); + free (buf); break; } } @@ -1265,22 +1249,17 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (r != bfd_reloc_ok) { - const char * msg = (const char *) 0; - switch (r) { case bfd_reloc_overflow: - if (!((*info->callbacks->reloc_overflow) - (info, NULL, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, NULL, name, howto->name, (bfd_vma) 0, + input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -1300,10 +1279,8 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c index 0176cc9..4681556 100644 --- a/bfd/elf32-m68k.c +++ b/bfd/elf32-m68k.c @@ -4185,13 +4185,9 @@ elf_m68k_relocate_section (bfd *output_bfd, } 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; - } + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); else { (*_bfd_error_handler) @@ -4496,20 +4492,18 @@ elf_m68k_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) break; case DT_PLTGOT: - name = ".got"; + name = ".got.plt"; 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; + s = bfd_get_linker_section (dynobj, name); + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 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); + s = bfd_get_linker_section (dynobj, ".rela.plt"); dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -4522,7 +4516,7 @@ elf_m68k_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) 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"); + s = bfd_get_linker_section (dynobj, ".rela.plt"); if (s != NULL) dyn.d_un.d_val -= s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); @@ -4579,12 +4573,9 @@ elf_m68k_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) objects, and before the final_link entry point is called. */ bfd_boolean -bfd_m68k_elf32_create_embedded_relocs (abfd, info, datasec, relsec, errmsg) - bfd *abfd; - struct bfd_link_info *info; - asection *datasec; - asection *relsec; - char **errmsg; +bfd_m68k_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; @@ -4844,11 +4835,10 @@ elf_m68k_add_symbol_hook (bfd *abfd, asection **secp ATTRIBUTE_UNUSED, bfd_vma *valp ATTRIBUTE_UNUSED) { - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; return TRUE; } diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c index c676e8f..0d18206 100644 --- a/bfd/elf32-mep.c +++ b/bfd/elf32-mep.c @@ -508,13 +508,13 @@ mep_elf_relocate_section switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -536,11 +536,8 @@ mep_elf_relocate_section } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-metag.c b/bfd/elf32-metag.c index 8b517be..84f7f11 100644 --- a/bfd/elf32-metag.c +++ b/bfd/elf32-metag.c @@ -1988,15 +1988,14 @@ elf_metag_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*info->callbacks->reloc_overflow) (info, (hh ? &hh->eh.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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -2017,11 +2016,8 @@ elf_metag_relocate_section (bfd *output_bfd, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } @@ -3330,16 +3326,14 @@ elf_metag_finish_dynamic_sections (bfd *output_bfd, continue; case DT_PLTGOT: - s = htab->sgot->output_section; - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma + htab->sgot->output_offset; + s = htab->sgot; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_JMPREL: - s = htab->srelplt->output_section; - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; + s = htab->srelplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c index b9c32a4..5496d16 100644 --- a/bfd/elf32-microblaze.c +++ b/bfd/elf32-microblaze.c @@ -1556,16 +1556,14 @@ microblaze_elf_relocate_section (bfd *output_bfd, 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; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, offset); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, offset, TRUE); break; case bfd_reloc_outofrange: @@ -1584,9 +1582,8 @@ microblaze_elf_relocate_section (bfd *output_bfd, errmsg = _("internal error: unknown error"); /* Fall through. */ common_error: - if (!((*info->callbacks->warning) - (info, errmsg, name, input_bfd, input_section, offset))) - return FALSE; + (*info->callbacks->warning) (info, errmsg, name, input_bfd, + input_section, offset); break; } } @@ -3288,7 +3285,7 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd, BFD_ASSERT (sgot != NULL && srela != NULL); offset = (sgot->output_section->vma + sgot->output_offset - + (h->got.offset &~ (bfd_vma) 1)); + + (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 @@ -3296,8 +3293,8 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd, The entry in the global offset table will already have been initialized in the relocate_section function. */ if (bfd_link_pic (info) - && (info->symbolic || h->dynindx == -1) - && h->def_regular) + && ((info->symbolic && h->def_regular) + || h->dynindx == -1)) { asection *sec = h->root.u.def.section; microblaze_elf_output_dynamic_relocation (output_bfd, @@ -3403,13 +3400,13 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd, { asection *s; - s = bfd_get_section_by_name (output_bfd, name); + s = bfd_get_linker_section (dynobj, name); if (s == NULL) dyn.d_un.d_val = 0; else { if (! size) - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; else dyn.d_un.d_val = s->size; } diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index 752f386..029de27 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -1027,6 +1027,21 @@ static reloc_howto_type elf_mips16_howto_table_rel[] = 0x0000ffff, /* src_mask */ 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* MIPS16 16-bit PC-relative branch offset. */ + HOWTO (R_MIPS16_PC16_S1, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_PC16_S1", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + TRUE), /* pcrel_offset */ }; static reloc_howto_type elf_micromips_howto_table_rel[] = @@ -1548,9 +1563,9 @@ static reloc_howto_type elf_mips_gnu_rel16_s2 = TRUE); /* pcrel_offset */ /* 32 bit pc-relative. This was a GNU extension used by embedded-PIC. - It was co-opted by mips-linux for exception-handling data. It is no - longer used, but should continue to be supported by the linker for - backward compatibility. (GCC stopped using it in May, 2004.) */ + It was co-opted by mips-linux for exception-handling data. GCC stopped + using it in May, 2004, then started using it again for compact unwind + tables. */ static reloc_howto_type elf_mips_gnu_pcrel32 = HOWTO (R_MIPS_PC32, /* type */ 0, /* rightshift */ @@ -2023,7 +2038,8 @@ static const struct elf_reloc_map mips16_reloc_map[] = R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min }, { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min }, - { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min } + { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }, + { BFD_RELOC_MIPS16_16_PCREL_S1, R_MIPS16_PC16_S1 - R_MIPS16_min } }; static const struct elf_reloc_map micromips_reloc_map[] = diff --git a/bfd/elf32-moxie.c b/bfd/elf32-moxie.c index 44ea3b5..10a7a22 100644 --- a/bfd/elf32-moxie.c +++ b/bfd/elf32-moxie.c @@ -270,15 +270,14 @@ moxie_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -299,11 +298,8 @@ moxie_elf_relocate_section (bfd *output_bfd, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c index 56f0cf1..94052fa 100644 --- a/bfd/elf32-msp430.c +++ b/bfd/elf32-msp430.c @@ -1341,15 +1341,14 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*info->callbacks->reloc_overflow) (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset); + (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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -1370,11 +1369,8 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (!r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-mt.c b/bfd/elf32-mt.c index 37f37a0..f3e7a5b 100644 --- a/bfd/elf32-mt.c +++ b/bfd/elf32-mt.c @@ -385,13 +385,13 @@ mt_elf_relocate_section switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -409,11 +409,8 @@ mt_elf_relocate_section } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-nds32.c b/bfd/elf32-nds32.c index 5fffbf2..09d26ae 100644 --- a/bfd/elf32-nds32.c +++ b/bfd/elf32-nds32.c @@ -2300,7 +2300,7 @@ nds32_insertion_sort (void *base, size_t nmemb, size_t size, { char *ptr = (char *) base; int i, j; - char *tmp = alloca (size); + char *tmp = xmalloc (size); /* If i is less than j, i is inserted before j. @@ -2324,6 +2324,7 @@ nds32_insertion_sort (void *base, size_t nmemb, size_t size, memmove (ptr + (j + 1) * size, ptr + j * size, (i - j) * size); memcpy (ptr + j * size, tmp, size); } + free (tmp); } /* Sort relocation by r_offset. @@ -5423,16 +5424,14 @@ check_reloc: 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; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, offset); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, offset, TRUE); break; case bfd_reloc_outofrange: @@ -5451,10 +5450,9 @@ check_reloc: errmsg = _("internal error: unknown error"); /* Fall through. */ -common_error: - if (!((*info->callbacks->warning) - (info, errmsg, name, input_bfd, input_section, offset))) - return FALSE; + common_error: + (*info->callbacks->warning) (info, errmsg, name, input_bfd, + input_section, offset); break; } } @@ -5709,20 +5707,17 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) break; case DT_PLTGOT: - /* name = ".got"; */ - s = htab->sgot->output_section; + s = htab->sgotplt; goto get_vma; case DT_JMPREL: - s = htab->srelplt->output_section; + s = htab->srelplt; get_vma: - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_PLTRELSZ: - s = htab->srelplt->output_section; - BFD_ASSERT (s != NULL); + s = htab->srelplt; dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -5739,7 +5734,7 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) about changing the DT_RELA entry. */ if (htab->srelplt != NULL) { - s = htab->srelplt->output_section; + s = htab->srelplt; dyn.d_un.d_val -= s->size; } bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); @@ -13061,25 +13056,22 @@ nds32_elf_get_relocated_section_contents (bfd *abfd, switch (r) { case bfd_reloc_undefined: - if (!((*link_info->callbacks->undefined_symbol) - (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), - input_bfd, input_section, (*parent)->address, TRUE))) - goto error_return; + (*link_info->callbacks->undefined_symbol) + (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + input_bfd, input_section, (*parent)->address, TRUE); break; case bfd_reloc_dangerous: BFD_ASSERT (error_message != NULL); - if (!((*link_info->callbacks->reloc_dangerous) - (link_info, error_message, input_bfd, input_section, - (*parent)->address))) - goto error_return; + (*link_info->callbacks->reloc_dangerous) + (link_info, error_message, + input_bfd, input_section, (*parent)->address); break; case bfd_reloc_overflow: - if (!((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*(*parent)->sym_ptr_ptr), - (*parent)->howto->name, (*parent)->addend, - input_bfd, input_section, (*parent)->address))) - goto error_return; + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, + bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + (*parent)->howto->name, (*parent)->addend, + input_bfd, input_section, (*parent)->address); break; case bfd_reloc_outofrange: /* PR ld/13730: diff --git a/bfd/elf32-nds32.h b/bfd/elf32-nds32.h index c28617f..8227827 100644 --- a/bfd/elf32-nds32.h +++ b/bfd/elf32-nds32.h @@ -22,6 +22,10 @@ #ifndef ELF32_NDS32_H #define ELF32_NDS32_H +#ifdef __cplusplus +extern "C" { +#endif + /* Relocation flags encoded in r_addend. */ /* Relocation flags for R_NDS32_ERLAX_ENTRY. */ @@ -152,4 +156,9 @@ struct elf_nds32_link_hash_table bfd_boolean ex9_loop_aware; /* Ignore ex9 if inside a loop. */ bfd_boolean ifc_loop_aware; /* Ignore ifc if inside a loop. */ }; + +#ifdef __cplusplus +} +#endif + #endif diff --git a/bfd/elf32-nios2.c b/bfd/elf32-nios2.c index 3f72b11..d85fc69 100644 --- a/bfd/elf32-nios2.c +++ b/bfd/elf32-nios2.c @@ -1905,7 +1905,7 @@ nios2_elf32_install_imm16 (asection *sec, bfd_vma offset, bfd_vma value) { bfd_vma word = bfd_get_32 (sec->owner, sec->contents + offset); - BFD_ASSERT(value <= 0xffff); + BFD_ASSERT (value <= 0xffff || ((bfd_signed_vma) value) >= -0xffff); bfd_put_32 (sec->owner, word | ((value & 0xffff) << 6), sec->contents + offset); @@ -4480,16 +4480,16 @@ nios2_elf32_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow (info, NULL, name, - howto->name, (bfd_vma) 0, - input_bfd, input_section, - rel->r_offset); + (*info->callbacks->reloc_overflow) (info, NULL, name, + howto->name, (bfd_vma) 0, + input_bfd, input_section, + rel->r_offset); break; case bfd_reloc_undefined: - r = info->callbacks->undefined_symbol (info, name, input_bfd, - input_section, - rel->r_offset, TRUE); + (*info->callbacks->undefined_symbol) (info, name, input_bfd, + input_section, + rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -4515,8 +4515,8 @@ nios2_elf32_relocate_section (bfd *output_bfd, if (msg) { - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); return FALSE; } } @@ -5344,22 +5344,19 @@ nios2_elf32_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTGOT: - s = htab->root.sgot; - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->output_section->vma; + s = htab->root.sgotplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_JMPREL: s = htab->root.srelplt; - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->output_section->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_PLTRELSZ: s = htab->root.srelplt; - BFD_ASSERT (s != NULL); dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -5379,9 +5376,9 @@ nios2_elf32_finish_dynamic_sections (bfd *output_bfd, break; case DT_NIOS2_GP: - s = htab->root.sgot; - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->output_section->vma + 0x7ff0; + s = htab->root.sgotplt; + dyn.d_un.d_ptr + = s->output_section->vma + s->output_offset + 0x7ff0; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; } diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c index 1daa7b6..0035f8e 100644 --- a/bfd/elf32-or1k.c +++ b/bfd/elf32-or1k.c @@ -1249,13 +1249,13 @@ or1k_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -1277,11 +1277,8 @@ or1k_elf_relocate_section (bfd *output_bfd, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (!r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } @@ -1759,20 +1756,17 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, continue; case DT_PLTGOT: - s = htab->sgot->output_section; - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; + s = htab->sgotplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_JMPREL: - s = htab->srelplt->output_section; - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; + s = htab->srelplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_PLTRELSZ: - s = htab->srelplt->output_section; - BFD_ASSERT (s != NULL); + s = htab->srelplt; dyn.d_un.d_val = s->size; break; @@ -1788,19 +1782,8 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, about changing the DT_RELA entry. */ if (htab->srelplt != NULL) { - /* FIXME: this calculation sometimes produces - wrong result, the problem is that the dyn.d_un.d_val - is not always correct, needs investigation why - that happens. In the meantime, reading the - ".rela.dyn" section by name seems to yield - correct result. - - s = htab->srelplt->output_section; + s = htab->srelplt; dyn.d_un.d_val -= s->size; - */ - - s = bfd_get_section_by_name (output_bfd, ".rela.dyn"); - dyn.d_un.d_val = s ? s->size : 0; } break; } diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 369a5e6..81b3d84 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -413,7 +413,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_GOT16", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -429,7 +429,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_GOT16_LO", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -445,7 +445,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_GOT16_HI", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -461,7 +461,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - ppc_elf_addr16_ha_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_GOT16_HA", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -476,8 +476,8 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 26, /* bitsize */ TRUE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + complain_overflow_signed, /* complain_on_overflow */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_PLTREL24", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -496,7 +496,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_COPY", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -512,7 +512,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_GLOB_DAT", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -527,7 +527,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_JMP_SLOT", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -622,7 +622,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_PLT32", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -638,7 +638,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { TRUE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_PLTREL32", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -654,7 +654,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_PLT16_LO", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -670,7 +670,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_PLT16_HI", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -686,7 +686,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - ppc_elf_addr16_ha_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_PLT16_HA", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -702,7 +702,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_SDAREL16", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -717,7 +717,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_SECTOFF", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -732,7 +732,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_SECTOFF_LO", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -747,7 +747,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_SECTOFF_HI", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -762,7 +762,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - ppc_elf_addr16_ha_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_SECTOFF_HA", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1238,7 +1238,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_NADDR32", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1253,7 +1253,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_NADDR16", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1268,7 +1268,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont,/* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_ADDR16_LO", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1283,7 +1283,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_NADDR16_HI", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1300,7 +1300,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - ppc_elf_addr16_ha_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_NADDR16_HA", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1317,7 +1317,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_SDAI16", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1334,7 +1334,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_SDA2I16", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1350,7 +1350,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_SDA2REL", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1367,7 +1367,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_SDA21", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1391,7 +1391,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_EMB_RELSDA", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1451,7 +1451,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_VLE_LO16A", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1466,8 +1466,8 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_LO16D", /* name */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_LO16D", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f07ff, /* dst_mask */ @@ -1481,8 +1481,8 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_HI16A", /* name */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_HI16A", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f007ff, /* dst_mask */ @@ -1496,8 +1496,8 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_HI16D", /* name */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_HI16D", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f07ff, /* dst_mask */ @@ -1511,8 +1511,8 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_HA16A", /* name */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_HA16A", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f007ff, /* dst_mask */ @@ -1526,8 +1526,8 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_HA16D", /* name */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_HA16D", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f07ff, /* dst_mask */ @@ -1543,8 +1543,8 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_SDA21", /* name */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_SDA21", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0xffff, /* dst_mask */ @@ -1558,7 +1558,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_VLE_SDA21_LO", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1572,9 +1572,9 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 16, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_SDAREL_LO16A", /* name */ + complain_overflow_dont, /* complain_on_overflow */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_SDAREL_LO16A", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f007ff, /* dst_mask */ @@ -1587,69 +1587,69 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 16, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - "R_PPC_VLE_SDAREL_LO16D", /* name */ + complain_overflow_dont, /* complain_on_overflow */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_SDAREL_LO16D", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f07ff, /* dst_mask */ FALSE), /* pcrel_offset */ /* Bits 16-31 relative to _SDA_BASE_ in split16a format. */ - HOWTO (R_PPC_VLE_SDAREL_HI16A, /* type */ + HOWTO (R_PPC_VLE_SDAREL_HI16A, /* 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_PPC_VLE_SDAREL_HI16A", /* name */ + complain_overflow_dont, /* complain_on_overflow */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_SDAREL_HI16A", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f007ff, /* dst_mask */ FALSE), /* pcrel_offset */ /* Bits 16-31 relative to _SDA_BASE_ in split16d format. */ - HOWTO (R_PPC_VLE_SDAREL_HI16D, /* type */ + HOWTO (R_PPC_VLE_SDAREL_HI16D, /* 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_PPC_VLE_SDAREL_HI16D", /* name */ + complain_overflow_dont, /* complain_on_overflow */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_SDAREL_HI16D", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f07ff, /* dst_mask */ FALSE), /* pcrel_offset */ /* Bits 16-31 (HA) relative to _SDA_BASE split16a format. */ - HOWTO (R_PPC_VLE_SDAREL_HA16A, /* type */ + HOWTO (R_PPC_VLE_SDAREL_HA16A, /* 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_PPC_VLE_SDAREL_HA16A", /* name */ + complain_overflow_dont, /* complain_on_overflow */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_SDAREL_HA16A", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f007ff, /* dst_mask */ FALSE), /* pcrel_offset */ /* Bits 16-31 (HA) relative to _SDA_BASE split16d format. */ - HOWTO (R_PPC_VLE_SDAREL_HA16D, /* type */ + HOWTO (R_PPC_VLE_SDAREL_HA16D, /* 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_PPC_VLE_SDAREL_HA16D", /* name */ + complain_overflow_dont, /* complain_on_overflow */ + ppc_elf_unhandled_reloc, /* special_function */ + "R_PPC_VLE_SDAREL_HA16D", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ 0x1f07ff, /* dst_mask */ @@ -1662,7 +1662,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_IRELATIVE", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -1783,7 +1783,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc_elf_unhandled_reloc, /* special_function */ "R_PPC_TOC16", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -2196,13 +2196,93 @@ ppc_elf_mkobject (bfd *abfd) PPC32_ELF_DATA); } +/* When defaulting arch/mach, decode apuinfo to find a better match. */ + +bfd_boolean +_bfd_elf_ppc_set_arch (bfd *abfd) +{ + unsigned long mach = 0; + asection *s; + unsigned char *contents; + + if (abfd->arch_info->bits_per_word == 32 + && bfd_big_endian (abfd)) + { + + for (s = abfd->sections; s != NULL; s = s->next) + if ((elf_section_data (s)->this_hdr.sh_flags & SHF_PPC_VLE) != 0) + break; + if (s != NULL) + mach = bfd_mach_ppc_vle; + } + + if (mach == 0) + { + s = bfd_get_section_by_name (abfd, APUINFO_SECTION_NAME); + if (s != NULL && bfd_malloc_and_get_section (abfd, s, &contents)) + { + unsigned int apuinfo_size = bfd_get_32 (abfd, contents + 4); + unsigned int i; + + for (i = 20; i < apuinfo_size + 20 && i + 4 <= s->size; i += 4) + { + unsigned int val = bfd_get_32 (abfd, contents + i); + switch (val >> 16) + { + case PPC_APUINFO_PMR: + case PPC_APUINFO_RFMCI: + if (mach == 0) + mach = bfd_mach_ppc_titan; + break; + + case PPC_APUINFO_ISEL: + case PPC_APUINFO_CACHELCK: + if (mach == bfd_mach_ppc_titan) + mach = bfd_mach_ppc_e500mc; + break; + + case PPC_APUINFO_SPE: + case PPC_APUINFO_EFS: + case PPC_APUINFO_BRLOCK: + if (mach != bfd_mach_ppc_vle) + mach = bfd_mach_ppc_e500; + + case PPC_APUINFO_VLE: + mach = bfd_mach_ppc_vle; + break; + + default: + mach = -1ul; + } + } + free (contents); + } + } + + if (mach != 0 && mach != -1ul) + { + const bfd_arch_info_type *arch; + + for (arch = abfd->arch_info->next; arch; arch = arch->next) + if (arch->mach == mach) + { + abfd->arch_info = arch; + break; + } + } + return TRUE; +} + /* Fix bad default arch selected for a 32 bit input bfd when the - default is 64 bit. */ + default is 64 bit. Also select arch based on apuinfo. */ static bfd_boolean ppc_elf_object_p (bfd *abfd) { - if (abfd->arch_info->the_default && abfd->arch_info->bits_per_word == 64) + if (!abfd->arch_info->the_default) + return TRUE; + + if (abfd->arch_info->bits_per_word == 64) { Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd); @@ -2213,7 +2293,7 @@ ppc_elf_object_p (bfd *abfd) BFD_ASSERT (abfd->arch_info->bits_per_word == 32); } } - return TRUE; + return _bfd_elf_ppc_set_arch (abfd); } /* Function to set whether a module needs the -mrelocatable bit set. */ @@ -2519,16 +2599,16 @@ ppc_elf_modify_segment_map (bfd *abfd, static const struct bfd_elf_special_section ppc_elf_special_sections[] = { - { STRING_COMMA_LEN (".plt"), 0, SHT_NOBITS, SHF_ALLOC + SHF_EXECINSTR }, - { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, - { STRING_COMMA_LEN (".sbss2"), -2, SHT_PROGBITS, SHF_ALLOC }, - { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, - { STRING_COMMA_LEN (".sdata2"), -2, SHT_PROGBITS, SHF_ALLOC }, - { STRING_COMMA_LEN (".tags"), 0, SHT_ORDERED, SHF_ALLOC }, - { STRING_COMMA_LEN (".PPC.EMB.apuinfo"), 0, SHT_NOTE, 0 }, - { STRING_COMMA_LEN (".PPC.EMB.sbss0"), 0, SHT_PROGBITS, SHF_ALLOC }, - { STRING_COMMA_LEN (".PPC.EMB.sdata0"), 0, SHT_PROGBITS, SHF_ALLOC }, - { NULL, 0, 0, 0, 0 } + { STRING_COMMA_LEN (".plt"), 0, SHT_NOBITS, SHF_ALLOC + SHF_EXECINSTR }, + { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, + { STRING_COMMA_LEN (".sbss2"), -2, SHT_PROGBITS, SHF_ALLOC }, + { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, + { STRING_COMMA_LEN (".sdata2"), -2, SHT_PROGBITS, SHF_ALLOC }, + { STRING_COMMA_LEN (".tags"), 0, SHT_ORDERED, SHF_ALLOC }, + { STRING_COMMA_LEN (APUINFO_SECTION_NAME), 0, SHT_NOTE, 0 }, + { STRING_COMMA_LEN (".PPC.EMB.sbss0"), 0, SHT_PROGBITS, SHF_ALLOC }, + { STRING_COMMA_LEN (".PPC.EMB.sdata0"), 0, SHT_PROGBITS, SHF_ALLOC }, + { NULL, 0, 0, 0, 0 } }; /* This is what we want for new plt/got. */ @@ -2637,9 +2717,6 @@ apuinfo_list_finish (void) head = NULL; } -#define APUINFO_SECTION_NAME ".PPC.EMB.apuinfo" -#define APUINFO_LABEL "APUinfo" - /* Scan the input BFDs and create a linked list of the APUinfo values that will need to be emitted. */ @@ -3288,7 +3365,8 @@ static struct bfd_link_hash_table * ppc_elf_link_hash_table_create (bfd *abfd) { struct ppc_elf_link_hash_table *ret; - static struct ppc_elf_params default_params = { PLT_OLD, 0, 1, 0, 0, 12, 0 }; + static struct ppc_elf_params default_params + = { PLT_OLD, 0, 1, 0, 0, 12, 0, 0 }; ret = bfd_zmalloc (sizeof (struct ppc_elf_link_hash_table)); if (ret == NULL) @@ -3334,6 +3412,7 @@ ppc_elf_link_params (struct bfd_link_info *info, struct ppc_elf_params *params) if (htab) htab->params = params; + params->pagesize_p2 = bfd_log2 (params->pagesize); } /* Create .got and the related sections. */ @@ -3674,11 +3753,10 @@ ppc_elf_add_symbol_hook (bfd *abfd, *valp = sym->st_size; } - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; return TRUE; } @@ -5164,6 +5242,7 @@ ppc_elf_tls_setup (bfd *obfd, struct bfd_link_info *info) tga->root.type = bfd_link_hash_indirect; tga->root.u.i.link = &opt->root; ppc_elf_copy_indirect_symbol (info, opt, tga); + opt->forced_local = 0; if (opt->dynindx != -1) { /* Use __tls_get_addr_opt in dynamic relocations. */ @@ -8567,13 +8646,12 @@ ppc_elf_relocate_section (bfd *output_bfd, at a symbol not in this object. */ if (unresolved_reloc) { - if (! (*info->callbacks->undefined_symbol) (info, - h->root.root.string, - input_bfd, - input_section, - rel->r_offset, - TRUE)) - return FALSE; + (*info->callbacks->undefined_symbol) (info, + h->root.root.string, + input_bfd, + input_section, + rel->r_offset, + TRUE); goto copy_reloc; } break; @@ -9509,13 +9587,9 @@ ppc_elf_relocate_section (bfd *output_bfd, && (h->root.type == bfd_link_hash_undefweak || h->root.type == bfd_link_hash_undefined) && is_branch_reloc (r_type))) - { - if (!((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), sym_name, - howto->name, rel->r_addend, - input_bfd, input_section, rel->r_offset))) - return FALSE; - } + info->callbacks->reloc_overflow + (info, (h ? &h->root : NULL), sym_name, howto->name, + rel->r_addend, input_bfd, input_section, rel->r_offset); } else { diff --git a/bfd/elf32-ppc.h b/bfd/elf32-ppc.h index dd26bd6..5f3a88b 100644 --- a/bfd/elf32-ppc.h +++ b/bfd/elf32-ppc.h @@ -48,6 +48,8 @@ struct ppc_elf_params /* The bfd backend detected a non-PIC reference to a protected symbol defined in a shared library. */ int pic_fixup; + + bfd_vma pagesize; }; void ppc_elf_link_params (struct bfd_link_info *, struct ppc_elf_params *); diff --git a/bfd/elf32-rl78.c b/bfd/elf32-rl78.c index b6e0eb8..70011f9 100644 --- a/bfd/elf32-rl78.c +++ b/bfd/elf32-rl78.c @@ -295,7 +295,6 @@ rl78_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED, static bfd_vma get_symbol_value (const char * name, - bfd_reloc_status_type * status, struct bfd_link_info * info, bfd * input_bfd, asection * input_section, @@ -312,12 +311,8 @@ get_symbol_value (const char * name, || (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)) { - bfd_reloc_status_type res; - - res = info->callbacks->undefined_symbol + (*info->callbacks->undefined_symbol) (info, name, input_bfd, input_section, offset, TRUE); - if (status) - * status = res; return 0; } @@ -327,44 +322,36 @@ get_symbol_value (const char * name, } static bfd_vma -get_romstart (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_romstart (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) { static bfd_boolean cached = FALSE; static bfd_vma cached_value = 0; - static bfd_reloc_status_type cached_status; if (!cached) { - cached_value = get_symbol_value ("_start", & cached_status, info, abfd, sec, offset); + cached_value = get_symbol_value ("_start", info, abfd, sec, offset); cached = TRUE; } - if (status) - * status = cached_status; return cached_value; } static bfd_vma -get_ramstart (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_ramstart (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) { static bfd_boolean cached = FALSE; static bfd_vma cached_value = 0; - static bfd_reloc_status_type cached_status; if (!cached) { - cached_value = get_symbol_value ("__datastart", & cached_status, info, abfd, sec, offset); + cached_value = get_symbol_value ("__datastart", info, abfd, sec, offset); cached = TRUE; } - if (status) - * status = cached_status; return cached_value; } @@ -573,12 +560,12 @@ rl78_special_reloc (bfd * input_bfd, break; case R_RL78_OPromtop: - relocation = get_romstart (&r, NULL, input_bfd, input_section, + relocation = get_romstart (NULL, input_bfd, input_section, reloc->address); break; case R_RL78_OPramtop: - relocation = get_ramstart (&r, NULL, input_bfd, input_section, + relocation = get_ramstart (NULL, input_bfd, input_section, reloc->address); break; } @@ -1068,12 +1055,12 @@ rl78_elf_relocate_section break; case R_RL78_OPromtop: - relocation = get_romstart (&r, info, input_bfd, input_section, rel->r_offset); + relocation = get_romstart (info, input_bfd, input_section, rel->r_offset); (void) rl78_compute_complex_reloc (r_type, relocation, input_section); break; case R_RL78_OPramtop: - relocation = get_ramstart (&r, info, input_bfd, input_section, rel->r_offset); + relocation = get_ramstart (info, input_bfd, input_section, rel->r_offset); (void) rl78_compute_complex_reloc (r_type, relocation, input_section); break; @@ -1094,15 +1081,14 @@ rl78_elf_relocate_section if (r_type == R_RL78_DIR24S_PCREL) msg = _("%B(%A): error: call to undefined function '%s'"); else - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_other: @@ -1128,9 +1114,6 @@ rl78_elf_relocate_section if (msg) _bfd_error_handler (msg, input_bfd, input_section, name); - - if (! r) - return FALSE; } } @@ -1932,12 +1915,12 @@ rl78_offset_for_reloc (bfd * abfd, break; case R_RL78_OPromtop: - symval = get_romstart (NULL, info, input_bfd, input_section, rel->r_offset); + symval = get_romstart (info, input_bfd, input_section, rel->r_offset); (void) rl78_compute_complex_reloc (r_type, symval, input_section); break; case R_RL78_OPramtop: - symval = get_ramstart (NULL, info, input_bfd, input_section, rel->r_offset); + symval = get_ramstart (info, input_bfd, input_section, rel->r_offset); (void) rl78_compute_complex_reloc (r_type, symval, input_section); break; diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c index 754eae1..49556d2 100644 --- a/bfd/elf32-rx.c +++ b/bfd/elf32-rx.c @@ -317,7 +317,6 @@ rx_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED, static bfd_vma get_symbol_value (const char * name, - bfd_reloc_status_type * status, struct bfd_link_info * info, bfd * input_bfd, asection * input_section, @@ -331,7 +330,7 @@ get_symbol_value (const char * name, if (h == NULL || (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)) - * status = info->callbacks->undefined_symbol + (*info->callbacks->undefined_symbol) (info, name, input_bfd, input_section, offset, TRUE); else value = (h->u.def.value @@ -340,6 +339,7 @@ get_symbol_value (const char * name, return value; } + static bfd_vma get_symbol_value_maybe (const char * name, struct bfd_link_info * info) @@ -362,8 +362,7 @@ get_symbol_value_maybe (const char * name, } static bfd_vma -get_gp (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_gp (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) @@ -373,15 +372,14 @@ get_gp (bfd_reloc_status_type * status, if (!cached) { - cached_value = get_symbol_value ("__gp", status, info, abfd, sec, offset); + cached_value = get_symbol_value ("__gp", info, abfd, sec, offset); cached = TRUE; } return cached_value; } static bfd_vma -get_romstart (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_romstart (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) @@ -391,15 +389,14 @@ get_romstart (bfd_reloc_status_type * status, if (!cached) { - cached_value = get_symbol_value ("_start", status, info, abfd, sec, offset); + cached_value = get_symbol_value ("_start", info, abfd, sec, offset); cached = TRUE; } return cached_value; } static bfd_vma -get_ramstart (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_ramstart (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) @@ -409,7 +406,7 @@ get_ramstart (bfd_reloc_status_type * status, if (!cached) { - cached_value = get_symbol_value ("__datastart", status, info, abfd, sec, offset); + cached_value = get_symbol_value ("__datastart", info, abfd, sec, offset); cached = TRUE; } return cached_value; @@ -553,7 +550,6 @@ rx_elf_relocate_section bfd_vma entry_vma; int idx; char *buf; - bfd_reloc_status_type tstat = 0; if (table_default_cache != name) { @@ -571,18 +567,14 @@ rx_elf_relocate_section buf = (char *) malloc (13 + strlen (name + 20)); sprintf (buf, "$tablestart$%s", name + 20); - tstat = 0; table_start_cache = get_symbol_value (buf, - &tstat, info, input_bfd, input_section, rel->r_offset); sprintf (buf, "$tableend$%s", name + 20); - tstat = 0; table_end_cache = get_symbol_value (buf, - &tstat, info, input_bfd, input_section, @@ -956,7 +948,7 @@ rx_elf_relocate_section case R_RX_RH_GPRELB: WARN_REDHAT ("RX_RH_GPRELB"); - relocation -= get_gp (&r, info, input_bfd, input_section, rel->r_offset); + relocation -= get_gp (info, input_bfd, input_section, rel->r_offset); RANGE (0, 65535); #if RX_OPCODE_BIG_ENDIAN OP (1) = relocation; @@ -969,7 +961,7 @@ rx_elf_relocate_section case R_RX_RH_GPRELW: WARN_REDHAT ("RX_RH_GPRELW"); - relocation -= get_gp (&r, info, input_bfd, input_section, rel->r_offset); + relocation -= get_gp (info, input_bfd, input_section, rel->r_offset); ALIGN (1); relocation >>= 1; RANGE (0, 65535); @@ -984,7 +976,7 @@ rx_elf_relocate_section case R_RX_RH_GPRELL: WARN_REDHAT ("RX_RH_GPRELL"); - relocation -= get_gp (&r, info, input_bfd, input_section, rel->r_offset); + relocation -= get_gp (info, input_bfd, input_section, rel->r_offset); ALIGN (3); relocation >>= 2; RANGE (0, 65535); @@ -1407,11 +1399,11 @@ rx_elf_relocate_section break; case R_RX_OPromtop: - RX_STACK_PUSH (get_romstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_romstart (info, input_bfd, input_section, rel->r_offset)); break; case R_RX_OPramtop: - RX_STACK_PUSH (get_ramstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_ramstart (info, input_bfd, input_section, rel->r_offset)); break; default: @@ -1431,15 +1423,14 @@ rx_elf_relocate_section if (r_type == R_RX_DIR24S_PCREL) msg = _("%B(%A): error: call to undefined function '%s'"); else - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_other: @@ -1465,9 +1456,6 @@ rx_elf_relocate_section if (msg) _bfd_error_handler (msg, input_bfd, input_section, name); - - if (! r) - return FALSE; } } @@ -1902,11 +1890,11 @@ rx_offset_for_reloc (bfd * abfd, break; case R_RX_OPromtop: - RX_STACK_PUSH (get_romstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_romstart (info, input_bfd, input_section, rel->r_offset)); break; case R_RX_OPramtop: - RX_STACK_PUSH (get_ramstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_ramstart (info, input_bfd, input_section, rel->r_offset)); break; case R_RX_DIR16UL: @@ -1941,6 +1929,8 @@ rx_offset_for_reloc (bfd * abfd, rel ++; } + /* FIXME. */ + (void) r; } static void @@ -3548,7 +3538,7 @@ rx_set_section_contents (bfd * abfd, if (! rv) return rv; - location ++; + location = (bfd_byte *) location + 1; offset ++; count --; caddr ++; @@ -3574,7 +3564,7 @@ rx_set_section_contents (bfd * abfd, } count -= scount; - location += scount; + location = (bfd_byte *) location + scount; offset += scount; if (count > 0) @@ -3593,7 +3583,7 @@ rx_set_section_contents (bfd * abfd, if (! rv) return rv; - location ++; + location = (bfd_byte *) location + 1; offset ++; count --; caddr ++; diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 972f4d3..1f058d2 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -3442,14 +3442,9 @@ elf_s390_relocate_section (bfd *output_bfd, } 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; - } + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); else { (*_bfd_error_handler) @@ -3696,7 +3691,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, /* Put in the GOT offset as displacement value. The 0xc000 value comes from the first word of the plt entry. Look - at the elf_s390_plt_pic16_entry content. */ + at the elf_s390_plt_pic12_entry content. */ bfd_put_16 (output_bfd, (bfd_vma)0xc000 | got_offset, htab->elf.splt->contents + h->plt.offset + 2); @@ -3953,16 +3948,17 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, continue; case DT_PLTGOT: - dyn.d_un.d_ptr = htab->elf.sgot->output_section->vma; + 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->elf.srelplt->output_section->vma; + s = htab->elf.srelplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_PLTRELSZ: - s = htab->elf.srelplt->output_section; - dyn.d_un.d_val = s->size; + dyn.d_un.d_val = htab->elf.srelplt->size + htab->elf.irelplt->size; break; } diff --git a/bfd/elf32-score.c b/bfd/elf32-score.c index 56b7cd7..2e9dd9a 100644 --- a/bfd/elf32-score.c +++ b/bfd/elf32-score.c @@ -2667,12 +2667,11 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd, } else if (!bfd_link_relocatable (info)) { - 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; + (*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)); relocation = 0; } } @@ -2718,16 +2717,14 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd, /* 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; + 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); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -2752,9 +2749,8 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } @@ -3618,21 +3614,19 @@ s3_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, 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; + 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; + s = bfd_get_linker_section (dynobj, name); + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_SCORE_BASE_ADDRESS: @@ -3665,9 +3659,7 @@ s3_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, 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); - + s = bfd_get_linker_section (dynobj, name); dyn.d_un.d_val = s->size / elemsize; break; diff --git a/bfd/elf32-score7.c b/bfd/elf32-score7.c index 349f866..d69cfdf 100644 --- a/bfd/elf32-score7.c +++ b/bfd/elf32-score7.c @@ -2440,12 +2440,11 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd, } else if (!bfd_link_relocatable (info)) { - 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; + (*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)); relocation = 0; } } @@ -2528,16 +2527,14 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd, /* 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; + 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); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -2557,9 +2554,8 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } @@ -3429,21 +3425,19 @@ s7_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, 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; + 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; + s = bfd_get_linker_section (dynobj, name); + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_SCORE_BASE_ADDRESS: @@ -3476,9 +3470,7 @@ s7_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, 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); - + s = bfd_get_linker_section (dynobj, name); dyn.d_un.d_val = s->size / elemsize; break; diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index b993113..52a5fd1 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -3952,10 +3952,10 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, datalabel processing here. Make sure this does not change without notice. */ if ((sym->st_other & STO_SH5_ISA32) != 0) - ((*info->callbacks->reloc_dangerous) - (info, - _("Unexpected STO_SH5_ISA32 on local symbol is not handled"), - input_bfd, input_section, rel->r_offset)); + (*info->callbacks->reloc_dangerous) + (info, + _("Unexpected STO_SH5_ISA32 on local symbol is not handled"), + input_bfd, input_section, rel->r_offset); if (sec != NULL && discarded_section (sec)) /* Handled below. */ @@ -4141,14 +4141,11 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; else if (!bfd_link_relocatable (info)) - { - 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; - } + (*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))); } if (sec != NULL && discarded_section (sec)) @@ -5520,11 +5517,9 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (*name == '\0') name = bfd_section_name (input_bfd, sec); } - 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; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); } break; } diff --git a/bfd/elf32-sh64.c b/bfd/elf32-sh64.c index ba11416..4e88de9 100644 --- a/bfd/elf32-sh64.c +++ b/bfd/elf32-sh64.c @@ -530,11 +530,9 @@ shmedia_prepare_reloc (struct bfd_link_info *info, bfd *abfd, && ((*relocation + rel->r_addend) & 1) == 0) msg = _("PTA mismatch: a SHcompact address (bit 0 == 0)"); - if (msg != NULL - && ! ((*info->callbacks->reloc_dangerous) - (info, msg, abfd, input_section, - rel->r_offset))) - return FALSE; + if (msg != NULL) + (*info->callbacks->reloc_dangerous) + (info, msg, abfd, input_section, rel->r_offset); } else { diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c index 213d20a..0e0d90c 100644 --- a/bfd/elf32-sparc.c +++ b/bfd/elf32-sparc.c @@ -136,6 +136,11 @@ elf32_sparc_final_write_processing (bfd *abfd, elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS | EF_SPARC_SUN_US1; break; case bfd_mach_sparc_v8plusb : + case bfd_mach_sparc_v8plusc : + case bfd_mach_sparc_v8plusd : + case bfd_mach_sparc_v8pluse : + case bfd_mach_sparc_v8plusv : + case bfd_mach_sparc_v8plusm : elf_elfheader (abfd)->e_machine = EM_SPARC32PLUS; elf_elfheader (abfd)->e_flags &=~ EF_SPARC_32PLUS_MASK; elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS | EF_SPARC_SUN_US1 @@ -180,11 +185,10 @@ elf32_sparc_add_symbol_hook (bfd * abfd, asection ** secp ATTRIBUTE_UNUSED, bfd_vma * valp ATTRIBUTE_UNUSED) { - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; return TRUE; } @@ -258,9 +262,26 @@ elf32_sparc_add_symbol_hook (bfd * abfd, /* The 32-bit static TLS arena size is rounded to the nearest 8-byte boundary. */ -#undef elf_backend_static_tls_alignment +#undef elf_backend_static_tls_alignment #define elf_backend_static_tls_alignment 8 +#undef elf_backend_strtab_flags +#define elf_backend_strtab_flags SHF_STRINGS + +static bfd_boolean +elf32_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED, + Elf_Internal_Shdr *osection ATTRIBUTE_UNUSED) +{ + /* PR 19938: FIXME: Need to add code for setting the sh_info + and sh_link fields of Solaris specific section types. */ + return FALSE; +} + +#undef elf_backend_copy_special_section_fields +#define elf_backend_copy_special_section_fields elf32_sparc_copy_solaris_special_section_fields + #include "elf32-target.h" /* A wrapper around _bfd_sparc_elf_link_hash_table_create that identifies @@ -292,39 +313,41 @@ elf32_sparc_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) elf_vxworks_final_write_processing (abfd, linker); } -#undef TARGET_BIG_SYM +#undef TARGET_BIG_SYM #define TARGET_BIG_SYM sparc_elf32_vxworks_vec -#undef TARGET_BIG_NAME +#undef TARGET_BIG_NAME #define TARGET_BIG_NAME "elf32-sparc-vxworks" -#undef ELF_MINPAGESIZE +#undef ELF_MINPAGESIZE #define ELF_MINPAGESIZE 0x1000 #undef bfd_elf32_bfd_link_hash_table_create #define bfd_elf32_bfd_link_hash_table_create \ elf32_sparc_vxworks_link_hash_table_create -#undef elf_backend_want_got_plt +#undef elf_backend_want_got_plt #define elf_backend_want_got_plt 1 -#undef elf_backend_plt_readonly +#undef elf_backend_plt_readonly #define elf_backend_plt_readonly 1 -#undef elf_backend_got_header_size +#undef elf_backend_got_header_size #define elf_backend_got_header_size 12 -#undef elf_backend_add_symbol_hook +#undef elf_backend_add_symbol_hook #define elf_backend_add_symbol_hook \ elf_vxworks_add_symbol_hook -#undef elf_backend_link_output_symbol_hook +#undef elf_backend_link_output_symbol_hook #define elf_backend_link_output_symbol_hook \ elf_vxworks_link_output_symbol_hook -#undef elf_backend_emit_relocs +#undef elf_backend_emit_relocs #define elf_backend_emit_relocs \ elf_vxworks_emit_relocs -#undef elf_backend_final_write_processing +#undef elf_backend_final_write_processing #define elf_backend_final_write_processing \ elf32_sparc_vxworks_final_write_processing -#undef elf_backend_static_tls_alignment +#undef elf_backend_static_tls_alignment +#undef elf_backend_strtab_flags +#undef elf_backend_copy_special_section_fields -#undef elf32_bed +#undef elf32_bed #define elf32_bed sparc_elf_vxworks_bed #include "elf32-target.h" diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index 0ed3422..e304b55 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -4908,12 +4908,11 @@ spu_elf_relocate_section (bfd *output_bfd, 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; + (*info->callbacks->undefined_symbol) (info, + h->root.root.string, + input_bfd, + input_section, + rel->r_offset, err); } sym_name = h->root.root.string; } @@ -5050,17 +5049,14 @@ spu_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - if (!((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), sym_name, howto->name, - (bfd_vma) 0, input_bfd, input_section, rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), sym_name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, sym_name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, sym_name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -5081,10 +5077,8 @@ spu_elf_relocate_section (bfd *output_bfd, common_error: ret = FALSE; - if (!((*info->callbacks->warning) - (info, msg, sym_name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, sym_name, input_bfd, + input_section, rel->r_offset); break; } } diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c index 0ca1e7a..87c8bfe 100644 --- a/bfd/elf32-tic6x.c +++ b/bfd/elf32-tic6x.c @@ -2719,20 +2719,16 @@ elf32_tic6x_relocate_section (bfd *output_bfd, /* 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; + 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); break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) (info, name, input_bfd, + input_section, + rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -2753,10 +2749,8 @@ elf32_tic6x_relocate_section (bfd *output_bfd, common_error: BFD_ASSERT (error_message != NULL); - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, rel->r_offset); break; } } diff --git a/bfd/elf32-tic6x.h b/bfd/elf32-tic6x.h index 80646c6..34d94a1 100644 --- a/bfd/elf32-tic6x.h +++ b/bfd/elf32-tic6x.h @@ -18,6 +18,10 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#ifdef __cplusplus +extern "C" { +#endif + extern int elf32_tic6x_merge_arch_attributes (int, int); /* This function is provided for use from the assembler. */ @@ -32,3 +36,7 @@ struct elf32_tic6x_params extern void elf32_tic6x_setup (struct bfd_link_info *, struct elf32_tic6x_params *); + +#ifdef __cplusplus +} +#endif diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c index 0439800..dfb93ff 100644 --- a/bfd/elf32-tilepro.c +++ b/bfd/elf32-tilepro.c @@ -3657,15 +3657,14 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -3686,11 +3685,8 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index 3df0e0e..f80b187 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -2271,18 +2271,14 @@ v850_elf_relocate_section (bfd *output_bfd, switch ((int) r) { case bfd_reloc_overflow: - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*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: - if (! ((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -2314,10 +2310,8 @@ v850_elf_relocate_section (bfd *output_bfd, /* fall through */ common_error: - if (!((*info->callbacks->warning) - (info, msg, name, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); break; } } @@ -2428,10 +2422,10 @@ v850_elf_set_note (bfd * abfd, enum v850_notes note, unsigned int val) return TRUE; } -/* Copy backend specific data from one object module to another. */ +/* Copy a v850 note section from one object module to another. */ -static bfd_boolean -v850_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd) +static void +v850_elf_copy_notes (bfd *ibfd, bfd *obfd) { asection * onotes; asection * inotes; @@ -2440,10 +2434,10 @@ v850_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd) skip the merge. The normal input to output section copying will take care of everythng for us. */ if ((onotes = bfd_get_section_by_name (obfd, V850_NOTE_SECNAME)) == NULL) - return TRUE; + return; if ((inotes = bfd_get_section_by_name (ibfd, V850_NOTE_SECNAME)) == NULL) - return TRUE; + return; if (bfd_section_size (ibfd, inotes) == bfd_section_size (obfd, onotes)) { @@ -2459,8 +2453,15 @@ v850_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd) /* Copy/overwrite notes from the input to the output. */ memcpy (ocont, icont, bfd_section_size (obfd, onotes)); } +} - return TRUE; +/* Copy backend specific data from one object module to another. */ + +static bfd_boolean +v850_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd) +{ + v850_elf_copy_notes (ibfd, obfd); + return _bfd_elf_copy_private_bfd_data (ibfd, obfd); } #define bfd_elf32_bfd_copy_private_bfd_data v850_elf_copy_private_bfd_data diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c index 56f1d75..41c52f1 100644 --- a/bfd/elf32-vax.c +++ b/bfd/elf32-vax.c @@ -1738,11 +1738,9 @@ elf_vax_relocate_section (bfd *output_bfd, if (*name == '\0') name = bfd_section_name (input_bfd, sec); } - 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; + info->callbacks->reloc_overflow + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); } break; } @@ -1929,20 +1927,18 @@ elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) break; case DT_PLTGOT: - name = ".got"; + name = ".got.plt"; 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; + s = bfd_get_linker_section (dynobj, name); + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; 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); + s = bfd_get_linker_section (dynobj, ".rela.plt"); dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -1955,7 +1951,7 @@ elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) 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"); + s = bfd_get_linker_section (dynobj, ".rela.plt"); if (s != NULL) dyn.d_un.d_val -= s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); diff --git a/bfd/elf32-visium.c b/bfd/elf32-visium.c index 32ca479..db854a0 100644 --- a/bfd/elf32-visium.c +++ b/bfd/elf32-visium.c @@ -662,13 +662,13 @@ visium_elf_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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->callbacks->undefined_symbol) (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; @@ -690,11 +690,8 @@ visium_elf_relocate_section (bfd *output_bfd, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (!r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-xstormy16.c b/bfd/elf32-xstormy16.c index b9309b3..cab0f23 100644 --- a/bfd/elf32-xstormy16.c +++ b/bfd/elf32-xstormy16.c @@ -920,15 +920,14 @@ xstormy16_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNU switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -949,11 +948,8 @@ xstormy16_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNU } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index 7873292..41506f4 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -110,7 +110,6 @@ 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 *); 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. */ @@ -2702,12 +2701,10 @@ elf_xtensa_relocate_section (bfd *output_bfd, r = contract_asm_expansion (contents, input_size, rel, &error_message); if (r != bfd_reloc_ok) - { - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; - } + (*info->callbacks->reloc_dangerous) + (info, error_message, + input_bfd, input_section, rel->r_offset); + r_type = ELF32_R_TYPE (rel->r_info); } @@ -2759,12 +2756,9 @@ elf_xtensa_relocate_section (bfd *output_bfd, } } if (r != bfd_reloc_ok) - { - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; - } + (*info->callbacks->reloc_dangerous) + (info, error_message, + input_bfd, input_section, rel->r_offset); /* Done with work for relocatable link; continue with next reloc. */ continue; @@ -2864,10 +2858,9 @@ elf_xtensa_relocate_section (bfd *output_bfd, { 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; + (*info->callbacks->reloc_dangerous) + (info, error_message, + input_bfd, input_section, rel->r_offset); } if (dynamic_symbol) @@ -2961,10 +2954,9 @@ elf_xtensa_relocate_section (bfd *output_bfd, { 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; + (*info->callbacks->reloc_dangerous) + (info, error_message, + input_bfd, input_section, rel->r_offset); } else { @@ -2985,10 +2977,9 @@ elf_xtensa_relocate_section (bfd *output_bfd, { 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; + (*info->callbacks->reloc_dangerous) + (info, error_message, + input_bfd, input_section, rel->r_offset); } indx = h && h->dynindx != -1 ? h->dynindx : 0; @@ -3030,12 +3021,9 @@ elf_xtensa_relocate_section (bfd *output_bfd, (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; - } + (*info->callbacks->reloc_dangerous) + (info, error_message, + input_bfd, input_section, rel->r_offset); if (r_type != R_XTENSA_TLS_ARG || is_ld_model) { @@ -3054,10 +3042,8 @@ elf_xtensa_relocate_section (bfd *output_bfd, 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; + (*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, rel->r_offset); continue; } break; @@ -3105,10 +3091,8 @@ elf_xtensa_relocate_section (bfd *output_bfd, strlen (name) + 22, name, (int) rel->r_addend); - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, rel->r_offset); } } @@ -3430,19 +3414,22 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd, break; case DT_XTENSA_GOT_LOC_OFF: - dyn.d_un.d_ptr = htab->sgotloc->output_section->vma; + dyn.d_un.d_ptr = (htab->sgotloc->output_section->vma + + htab->sgotloc->output_offset); break; case DT_PLTGOT: - dyn.d_un.d_ptr = htab->sgot->output_section->vma; + dyn.d_un.d_ptr = (htab->sgot->output_section->vma + + htab->sgot->output_offset); break; case DT_JMPREL: - dyn.d_un.d_ptr = htab->srelplt->output_section->vma; + dyn.d_un.d_ptr = (htab->srelplt->output_section->vma + + htab->srelplt->output_offset); break; case DT_PLTRELSZ: - dyn.d_un.d_val = htab->srelplt->output_section->size; + dyn.d_un.d_val = htab->srelplt->size; break; case DT_RELASZ: @@ -3453,7 +3440,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd, for .rela.plt to follow all other relocation sections, we don't have to worry about changing the DT_RELA entry. */ if (htab->srelplt) - dyn.d_un.d_val -= htab->srelplt->output_section->size; + dyn.d_un.d_val -= htab->srelplt->size; break; } diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index 54796b8..681f792 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -4825,11 +4825,9 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (*name == '\0') name = bfd_section_name (input_bfd, sec); } - if (! ((*info->callbacks->reloc_overflow) - (info, (h ? &h->root.root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_offset))) - ret_val = FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root.root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); } break; @@ -5011,7 +5009,7 @@ elf64_alpha_finish_dynamic_sections (bfd *output_bfd, bfd_vma plt_vma, gotplt_vma; splt = bfd_get_linker_section (dynobj, ".plt"); - srelaplt = bfd_get_linker_section (output_bfd, ".rela.plt"); + srelaplt = bfd_get_linker_section (dynobj, ".rela.plt"); BFD_ASSERT (splt != NULL && sdyn != NULL); plt_vma = splt->output_section->vma + splt->output_offset; @@ -5043,7 +5041,8 @@ elf64_alpha_finish_dynamic_sections (bfd *output_bfd, dyn.d_un.d_val = srelaplt ? srelaplt->size : 0; break; case DT_JMPREL: - dyn.d_un.d_ptr = srelaplt ? srelaplt->vma : 0; + dyn.d_un.d_ptr = srelaplt ? (srelaplt->output_section->vma + + srelaplt->output_offset) : 0; break; case DT_RELASZ: diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 3021ed6..fca40e1 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -26,7 +26,7 @@ #include "elf/hppa.h" #include "libhppa.h" #include "elf64-hppa.h" - +#include "libiberty.h" #define ARCH_SIZE 64 @@ -1094,20 +1094,18 @@ allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data) char *new_name; struct elf_link_hash_entry *nh; - new_name = alloca (strlen (eh->root.root.string) + 2); - new_name[0] = '.'; - strcpy (new_name + 1, eh->root.root.string); + new_name = concat (".", eh->root.root.string, NULL); nh = elf_link_hash_lookup (elf_hash_table (x->info), new_name, TRUE, TRUE, TRUE); + free (new_name); 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; - } hh->opd_offset = x->ofs; x->ofs += OPD_ENTRY_SIZE; @@ -2205,9 +2203,7 @@ elf64_hppa_finalize_opd (struct elf_link_hash_entry *eh, void *data) char *new_name; struct elf_link_hash_entry *nh; - new_name = alloca (strlen (eh->root.root.string) + 2); - new_name[0] = '.'; - strcpy (new_name + 1, eh->root.root.string); + new_name = concat (".", eh->root.root.string, NULL); nh = elf_link_hash_lookup (elf_hash_table (info), new_name, TRUE, TRUE, FALSE); @@ -2216,6 +2212,7 @@ elf64_hppa_finalize_opd (struct elf_link_hash_entry *eh, void *data) symbol index. */ if (nh) dynindx = nh->dynindx; + free (new_name); } rel.r_addend = 0; @@ -3911,12 +3908,11 @@ elf64_hppa_relocate_section (bfd *output_bfd, 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; + (*info->callbacks->undefined_symbol) (info, + eh->root.root.string, + input_bfd, + input_section, + rel->r_offset, err); } if (!bfd_link_relocatable (info) @@ -3928,12 +3924,9 @@ elf64_hppa_relocate_section (bfd *output_bfd, 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; - } + (*info->callbacks->undefined_symbol) + (info, eh_name (eh), input_bfd, + input_section, rel->r_offset, FALSE); } } @@ -3972,11 +3965,9 @@ elf64_hppa_relocate_section (bfd *output_bfd, 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; + (*info->callbacks->reloc_overflow) + (info, (eh ? &eh->root : NULL), sym_name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); } break; } diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c index 760e1db..56c1103 100644 --- a/bfd/elf64-ia64-vms.c +++ b/bfd/elf64-ia64-vms.c @@ -3902,10 +3902,9 @@ elf64_ia64_relocate_section (bfd *output_bfd, else name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sym_sec); - if (!(*info->callbacks->warning) (info, _("unsupported reloc"), - name, input_bfd, - input_section, rel->r_offset)) - return FALSE; + (*info->callbacks->warning) (info, _("unsupported reloc"), + name, input_bfd, + input_section, rel->r_offset); ret_val = FALSE; } break; @@ -3960,15 +3959,14 @@ elf64_ia64_relocate_section (bfd *output_bfd, break; } default: - if (!(*info->callbacks->reloc_overflow) (info, - &h->root, - name, - howto->name, - (bfd_vma) 0, - input_bfd, - input_section, - rel->r_offset)) - return FALSE; + (*info->callbacks->reloc_overflow) (info, + &h->root, + name, + howto->name, + (bfd_vma) 0, + input_bfd, + input_section, + rel->r_offset); break; } @@ -5361,7 +5359,7 @@ elf64_vms_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) to include it. We don't need to check anything. */ if (! (*info->callbacks->add_archive_element) (info, element, h->root.string, &element)) - return FALSE; + continue; if (! elf64_vms_link_add_object_symbols (element, info)) return FALSE; diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index 6bedebc..f04c4b5 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -1881,6 +1881,21 @@ static reloc_howto_type mips16_elf64_howto_table_rel[] = 0x0000ffff, /* src_mask */ 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* MIPS16 16-bit PC-relative branch offset. */ + HOWTO (R_MIPS16_PC16_S1, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_PC16_S1", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + TRUE), /* pcrel_offset */ }; static reloc_howto_type mips16_elf64_howto_table_rela[] = @@ -2082,6 +2097,21 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] = 0, /* src_mask */ 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* MIPS16 16-bit PC-relative branch offset. */ + HOWTO (R_MIPS16_PC16_S1, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_PC16_S1", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + TRUE), /* pcrel_offset */ }; static reloc_howto_type micromips_elf64_howto_table_rel[] = @@ -3415,7 +3445,8 @@ static const struct elf_reloc_map mips16_reloc_map[] = R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min }, { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min }, - { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min } + { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }, + { BFD_RELOC_MIPS16_16_PCREL_S1, R_MIPS16_PC16_S1 - R_MIPS16_min } }; static const struct elf_reloc_map micromips_reloc_map[] = @@ -4478,29 +4509,6 @@ const struct elf_size_info mips_elf64_size_info = #define bfd_elf64_bfd_relax_section _bfd_mips_relax_section #define bfd_elf64_mkobject _bfd_mips_elf_mkobject -/* MIPS ELF64 archive functions. */ -#define bfd_elf64_archive_functions -extern bfd_boolean bfd_elf64_archive_slurp_armap - (bfd *); -extern bfd_boolean bfd_elf64_archive_write_armap - (bfd *, unsigned int, struct orl *, unsigned int, int); -#define bfd_elf64_archive_slurp_extended_name_table \ - _bfd_archive_coff_slurp_extended_name_table -#define bfd_elf64_archive_construct_extended_name_table \ - _bfd_archive_coff_construct_extended_name_table -#define bfd_elf64_archive_truncate_arname \ - _bfd_archive_coff_truncate_arname -#define bfd_elf64_archive_read_ar_hdr _bfd_archive_coff_read_ar_hdr -#define bfd_elf64_archive_write_ar_hdr _bfd_archive_coff_write_ar_hdr -#define bfd_elf64_archive_openr_next_archived_file \ - _bfd_archive_coff_openr_next_archived_file -#define bfd_elf64_archive_get_elt_at_index \ - _bfd_archive_coff_get_elt_at_index -#define bfd_elf64_archive_generic_stat_arch_elt \ - _bfd_archive_coff_generic_stat_arch_elt -#define bfd_elf64_archive_update_armap_timestamp \ - _bfd_archive_coff_update_armap_timestamp - /* The SGI style (n)64 NewABI. */ #define TARGET_LITTLE_SYM mips_elf64_le_vec #define TARGET_LITTLE_NAME "elf64-littlemips" diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c index 62ce9a5..2038813 100644 --- a/bfd/elf64-mmix.c +++ b/bfd/elf64-mmix.c @@ -1516,13 +1516,12 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (r != bfd_reloc_ok) { - bfd_boolean check_ok = TRUE; const char * msg = (const char *) NULL; switch (r) { case bfd_reloc_overflow: - check_ok = info->callbacks->reloc_overflow + info->callbacks->reloc_overflow (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; @@ -1530,9 +1529,8 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, case bfd_reloc_undefined: /* We may have sent this message above. */ if (! undefined_signalled) - check_ok = info->callbacks->undefined_symbol - (info, name, input_bfd, input_section, rel->r_offset, - TRUE); + info->callbacks->undefined_symbol + (info, name, input_bfd, input_section, rel->r_offset, TRUE); undefined_signalled = TRUE; break; @@ -1554,11 +1552,8 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, } if (msg) - check_ok = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! check_ok) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } @@ -2114,9 +2109,7 @@ static asymbol *mmix_elf_reg_section_symbol_ptr; /* Handle the special section numbers that a symbol may use. */ void -mmix_elf_symbol_processing (abfd, asym) - bfd *abfd ATTRIBUTE_UNUSED; - asymbol *asym; +mmix_elf_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *asym) { elf_symbol_type *elfsym; @@ -2491,9 +2484,8 @@ bpo_reloc_request_sort_fn (const void * p1, const void * p2) from base-plus-offset relocs. */ void -mmix_dump_bpo_gregs (link_info, pf) - struct bfd_link_info *link_info; - bfd_error_handler_type pf; +mmix_dump_bpo_gregs (struct bfd_link_info *link_info, + bfd_error_handler_type pf) { bfd *bpo_greg_owner; asection *bpo_gregs_section; diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index f0bcee1..34d4635 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -687,7 +687,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = { TRUE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + ppc64_elf_unhandled_reloc, /* special_function */ "R_PPC64_PLTREL32", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -2570,6 +2570,7 @@ ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, elf_symbol_type *elfsym = (elf_symbol_type *) symbol; if (symbol->section->owner != abfd + && symbol->section->owner != NULL && abiversion (symbol->section->owner) >= 2) { unsigned int i; @@ -2887,12 +2888,15 @@ ppc64_elf_mkobject (bfd *abfd) } /* Fix bad default arch selected for a 64 bit input bfd when the - default is 32 bit. */ + default is 32 bit. Also select arch based on apuinfo. */ static bfd_boolean ppc64_elf_object_p (bfd *abfd) { - if (abfd->arch_info->the_default && abfd->arch_info->bits_per_word == 32) + if (!abfd->arch_info->the_default) + return TRUE; + + if (abfd->arch_info->bits_per_word == 32) { Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd); @@ -2903,7 +2907,7 @@ ppc64_elf_object_p (bfd *abfd) BFD_ASSERT (abfd->arch_info->bits_per_word == 64); } } - return TRUE; + return _bfd_elf_ppc_set_arch (abfd); } /* Support for core dump NOTE sections. */ @@ -4344,14 +4348,20 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info) htab = ppc_hash_table (info); - /* Create .sfpr for code to save and restore fp regs. */ flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED); - htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr", - flags); - if (htab->sfpr == NULL - || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2)) - return FALSE; + if (htab->params->save_restore_funcs) + { + /* Create .sfpr for code to save and restore fp regs. */ + htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr", + flags); + if (htab->sfpr == NULL + || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2)) + return FALSE; + } + + if (bfd_link_relocatable (info)) + return TRUE; /* Create .glink for lazy dynamic linking support. */ htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink", @@ -4424,14 +4434,9 @@ ppc64_elf_init_stub_bfd (struct bfd_link_info *info, linker created stub bfd. This ensures that the GOT header is at the start of the output TOC section. */ htab = ppc_hash_table (info); - if (htab == NULL) - return FALSE; htab->elf.dynobj = params->stub_bfd; htab->params = params; - if (bfd_link_relocatable (info)) - return TRUE; - return create_linkage_sections (htab->elf.dynobj, info); } @@ -4893,11 +4898,10 @@ ppc64_elf_add_symbol_hook (bfd *ibfd, asection **sec, bfd_vma *value) { - if ((ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (isym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC && (ibfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; if (*sec != NULL && strcmp ((*sec)->name, ".opd") == 0) @@ -5149,7 +5153,7 @@ ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info) } /* We need to fix the undefs list for any syms we have twiddled to - undef_weak. */ + undefweak. */ if (htab->twiddled_syms) { bfd_link_repair_undef_list (&htab->elf.root); @@ -6665,7 +6669,7 @@ sfpr_define (struct bfd_link_info *info, sym[len + 0] = i / 10 + '0'; sym[len + 1] = i % 10 + '0'; h = (struct ppc_link_hash_entry *) - elf_link_hash_lookup (&htab->elf, sym, FALSE, FALSE, TRUE); + elf_link_hash_lookup (&htab->elf, sym, writing, TRUE, TRUE); if (stub_sec != NULL) { if (h != NULL @@ -6706,6 +6710,7 @@ sfpr_define (struct bfd_link_info *info, h->elf.root.u.def.value = htab->sfpr->size; h->elf.type = STT_FUNC; h->elf.def_regular = 1; + h->elf.non_elf = 0; _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE); writing = TRUE; if (htab->sfpr->contents == NULL) @@ -7050,14 +7055,28 @@ ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) { struct ppc_link_hash_table *htab; - unsigned int i; htab = ppc_hash_table (info); if (htab == NULL) return FALSE; - if (!bfd_link_relocatable (info) - && htab->elf.hgot != NULL) + /* Provide any missing _save* and _rest* functions. */ + if (htab->sfpr != NULL) + { + unsigned int i; + + htab->sfpr->size = 0; + for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++) + if (!sfpr_define (info, &save_res_funcs[i], NULL)) + return FALSE; + if (htab->sfpr->size == 0) + htab->sfpr->flags |= SEC_EXCLUDE; + } + + if (bfd_link_relocatable (info)) + return TRUE; + + if (htab->elf.hgot != NULL) { _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE); /* Make .TOC. defined so as to prevent it being made dynamic. @@ -7076,22 +7095,8 @@ ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED, | STV_HIDDEN); } - if (htab->sfpr == NULL) - /* We don't have any relocs. */ - return TRUE; - - /* Provide any missing _save* and _rest* functions. */ - htab->sfpr->size = 0; - if (htab->params->save_restore_funcs) - for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++) - if (!sfpr_define (info, &save_res_funcs[i], NULL)) - return FALSE; - elf_link_hash_traverse (&htab->elf, func_desc_adjust, info); - if (htab->sfpr->size == 0) - htab->sfpr->flags |= SEC_EXCLUDE; - return TRUE; } @@ -8224,6 +8229,7 @@ ppc64_elf_tls_setup (struct bfd_link_info *info) 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); + opt_fd->forced_local = 0; if (opt_fd->dynindx != -1) { /* Use __tls_get_addr_opt in dynamic relocations. */ @@ -8240,6 +8246,7 @@ ppc64_elf_tls_setup (struct bfd_link_info *info) tga->root.type = bfd_link_hash_indirect; tga->root.u.i.link = &opt->root; ppc64_elf_copy_indirect_symbol (info, opt, tga); + opt->forced_local = 0; _bfd_elf_link_hash_hide_symbol (info, opt, tga->forced_local); htab->tls_get_addr = (struct ppc_link_hash_entry *) opt; @@ -9549,71 +9556,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (htab == NULL) return FALSE; - if ((htab->elf.dynamic_sections_created - && h->dynindx != -1 - && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), 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 (!htab->elf.dynamic_sections_created - || h->dynindx == -1) - { - s = htab->elf.iplt; - pent->plt.offset = s->size; - s->size += PLT_ENTRY_SIZE (htab); - s = htab->elf.irelplt; - } - else - { - /* If this is the first .plt entry, make room for the special - first entry. */ - s = htab->elf.splt; - if (s->size == 0) - s->size += PLT_INITIAL_ENTRY_SIZE (htab); - - pent->plt.offset = s->size; - - /* Make room for this entry. */ - s->size += PLT_ENTRY_SIZE (htab); - - /* Make room for the .glink code. */ - s = htab->glink; - if (s->size == 0) - s->size += GLINK_CALL_STUB_SIZE; - if (htab->opd_abi) - { - /* We need bigger stubs past index 32767. */ - if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4) - s->size += 4; - s->size += 2*4; - } - else - s->size += 4; - - /* We also need to make an entry in the .rela.plt section. */ - s = htab->elf.srelplt; - } - s->size += sizeof (Elf64_External_Rela); - doneone = TRUE; - } - else - pent->plt.offset = (bfd_vma) -1; - if (!doneone) - { - h->plt.plist = NULL; - h->needs_plt = 0; - } - } - else - { - h->plt.plist = NULL; - h->needs_plt = 0; - } - eh = (struct ppc_link_hash_entry *) h; /* Run through the TLS GD got entries first if we're changing them to TPREL. */ @@ -9683,99 +9625,165 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) allocate_got (h, info, gent); } - 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 - dynamic pc-relative relocs against symbols which turn out to be - defined in regular objects. For the normal shared case, discard - space for relocs that have become local due to symbol visibility - changes. */ - - if (bfd_link_pic (info)) + if (eh->dyn_relocs != NULL + && (htab->elf.dynamic_sections_created + || h->type == STT_GNU_IFUNC)) { - /* 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 - 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 - then they should avoid writing weird assembly. */ - if (SYMBOL_CALLS_LOCAL (info, h)) + /* 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 relocs that have become local due to symbol + visibility changes. */ + + if (bfd_link_pic (info)) { - struct elf_dyn_relocs **pp; + /* 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 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 then they should + avoid writing weird assembly. */ + if (SYMBOL_CALLS_LOCAL (info, h)) + { + struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + 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) { - p->count -= p->pc_count; - p->pc_count = 0; - if (p->count == 0) - *pp = p->next; - else - pp = &p->next; + if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + eh->dyn_relocs = NULL; + + /* Make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + else if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } } } - - /* Also discard relocs on undefined weak syms with non-default - visibility. */ - if (eh->dyn_relocs != NULL - && h->root.type == bfd_link_hash_undefweak) + else if (h->type == STT_GNU_IFUNC) { - if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + if (!h->non_got_ref) eh->dyn_relocs = NULL; + } + else if (ELIMINATE_COPY_RELOCS) + { + /* For the non-shared case, discard space for relocs against + symbols which turn out to need copy relocs or are not + dynamic. */ - /* Make sure this symbol is output as a dynamic symbol. - Undefined weak syms won't yet be marked as dynamic. */ - else if (h->dynindx == -1 - && !h->forced_local) + if (!h->non_got_ref + && !h->def_regular) { - if (! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; + /* 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; + if (eh->elf.type == STT_GNU_IFUNC) + sreloc = htab->elf.irelplt; + sreloc->size += p->count * sizeof (Elf64_External_Rela); } } - else if (h->type == STT_GNU_IFUNC) - { - if (!h->non_got_ref) - eh->dyn_relocs = NULL; - } - else if (ELIMINATE_COPY_RELOCS) + + if ((htab->elf.dynamic_sections_created + && h->dynindx != -1 + && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) + || h->type == STT_GNU_IFUNC) { - /* For the non-shared case, discard space for relocs against - symbols which turn out to need copy relocs or are not - dynamic. */ + struct plt_entry *pent; + bfd_boolean doneone = FALSE; + for (pent = h->plt.plist; pent != NULL; pent = pent->next) + if (pent->plt.refcount > 0) + { + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + { + s = htab->elf.iplt; + pent->plt.offset = s->size; + s->size += PLT_ENTRY_SIZE (htab); + s = htab->elf.irelplt; + } + else + { + /* If this is the first .plt entry, make room for the special + first entry. */ + s = htab->elf.splt; + if (s->size == 0) + s->size += PLT_INITIAL_ENTRY_SIZE (htab); - if (!h->non_got_ref - && !h->def_regular) - { - /* 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; - } + pent->plt.offset = s->size; - /* If that succeeded, we know we'll be keeping all the - relocs. */ - if (h->dynindx != -1) - goto keep; - } + /* Make room for this entry. */ + s->size += PLT_ENTRY_SIZE (htab); - eh->dyn_relocs = NULL; + /* Make room for the .glink code. */ + s = htab->glink; + if (s->size == 0) + s->size += GLINK_CALL_STUB_SIZE; + if (htab->opd_abi) + { + /* We need bigger stubs past index 32767. */ + if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4) + s->size += 4; + s->size += 2*4; + } + else + s->size += 4; - keep: ; + /* We also need to make an entry in the .rela.plt section. */ + s = htab->elf.srelplt; + } + s->size += sizeof (Elf64_External_Rela); + doneone = TRUE; + } + else + pent->plt.offset = (bfd_vma) -1; + if (!doneone) + { + h->plt.plist = NULL; + h->needs_plt = 0; + } } - - /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + else { - asection *sreloc = elf_section_data (p->sec)->sreloc; - if (eh->elf.type == STT_GNU_IFUNC) - sreloc = htab->elf.irelplt; - sreloc->size += p->count * sizeof (Elf64_External_Rela); + h->plt.plist = NULL; + h->needs_plt = 0; } return TRUE; @@ -12177,6 +12185,13 @@ ppc64_elf_size_stubs (struct bfd_link_info *info) if (!group_sections (info, stub_group_size, stubs_always_before_branch)) return FALSE; +#define STUB_SHRINK_ITER 20 + /* Loop until no stubs added. After iteration 20 of this loop we may + exit on a stub section shrinking. This is to break out of a + pathological case where adding stubs on one iteration decreases + section gaps (perhaps due to alignment), which then requires + fewer or smaller stubs on the next iteration. */ + while (1) { bfd *input_bfd; @@ -12558,11 +12573,11 @@ ppc64_elf_size_stubs (struct bfd_link_info *info) stub_sec != NULL; stub_sec = stub_sec->next) if ((stub_sec->flags & SEC_LINKER_CREATED) == 0 - && stub_sec->rawsize != stub_sec->size) + && stub_sec->rawsize != stub_sec->size + && (htab->stub_iteration <= STUB_SHRINK_ITER + || stub_sec->rawsize < stub_sec->size)) break; - /* Exit from this loop when no stubs have been added, and no stubs - have changed size. */ if (stub_sec == NULL && (htab->glink_eh_frame == NULL || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size)) @@ -12893,9 +12908,6 @@ ppc64_elf_build_stubs (struct bfd_link_info *info, stub_sec->contents = bfd_zalloc (htab->params->stub_bfd, stub_sec->size); if (stub_sec->contents == NULL) return FALSE; - /* We want to check that built size is the same as calculated - size. rawsize is a convenient location to use. */ - stub_sec->rawsize = stub_sec->size; stub_sec->size = 0; } @@ -13084,7 +13096,9 @@ ppc64_elf_build_stubs (struct bfd_link_info *info, if ((stub_sec->flags & SEC_LINKER_CREATED) == 0) { stub_sec_count += 1; - if (stub_sec->rawsize != stub_sec->size) + if (stub_sec->rawsize != stub_sec->size + && (htab->stub_iteration <= STUB_SHRINK_ITER + || stub_sec->rawsize < stub_sec->size)) break; } @@ -15139,13 +15153,11 @@ ppc64_elf_relocate_section (bfd *output_bfd, && (h->elf.root.type == bfd_link_hash_undefweak || h->elf.root.type == bfd_link_hash_undefined) && is_branch_reloc (r_type)))) - { - if (!((*info->callbacks->reloc_overflow) - (info, &h->elf.root, sym_name, - reloc_name, orig_rel.r_addend, - input_bfd, input_section, rel->r_offset))) - return FALSE; - } + info->callbacks->reloc_overflow (info, &h->elf.root, + sym_name, reloc_name, + orig_rel.r_addend, + input_bfd, input_section, + rel->r_offset); } else { diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 1261044..a39e1c9 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -492,8 +492,8 @@ elf_s390_is_local_label_name (bfd *abfd, const char *name) The GOT holds the address in the PLT to be executed. The loader then gets: - 24(15) = Pointer to the structure describing the object. - 28(15) = Offset in symbol table + 48(15) = Pointer to the structure describing the object. + 56(15) = Offset in symbol table The loader must then find the module where the function is and insert the address in the GOT. @@ -2479,7 +2479,7 @@ elf_s390_relocate_section (bfd *output_bfd, PLT_ENTRY_SIZE; /* Offset in GOT is PLT index plus GOT headers(3) - times 4, addr & GOT addr. */ + times 8, addr & GOT addr. */ relocation = (plt_index + 3) * GOT_ENTRY_SIZE; if (r_type == R_390_GOTPLTENT) relocation += htab->elf.sgot->output_section->vma; @@ -3357,14 +3357,9 @@ elf_s390_relocate_section (bfd *output_bfd, } 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; - } + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); else { (*_bfd_error_handler) @@ -3749,16 +3744,17 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, continue; case DT_PLTGOT: - dyn.d_un.d_ptr = htab->elf.sgot->output_section->vma; + 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->elf.srelplt->output_section->vma; + s = htab->elf.srelplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_PLTRELSZ: - s = htab->elf.srelplt->output_section; - dyn.d_un.d_val = s->size; + dyn.d_un.d_val = htab->elf.srelplt->size + htab->elf.irelplt->size; break; case DT_RELASZ: @@ -3769,8 +3765,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, 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 = htab->elf.srelplt->output_section; - dyn.d_un.d_val -= s->size; + dyn.d_un.d_val -= htab->elf.srelplt->size + htab->elf.irelplt->size; break; } @@ -3785,9 +3780,10 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, PLT_FIRST_ENTRY_SIZE); /* Fixup relative address to start of GOT */ bfd_put_32 (output_bfd, - (htab->elf.sgotplt->output_section->vma + - htab->elf.sgotplt->output_offset - - htab->elf.splt->output_section->vma - 6)/2, + (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + - htab->elf.splt->output_section->vma + - htab->elf.splt->output_offset - 6)/2, htab->elf.splt->contents + 8); } if (elf_section_data (htab->elf.splt->output_section) != NULL) @@ -3807,7 +3803,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, /* One entry for shared object struct ptr. */ bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 8); /* One entry for _dl_runtime_resolve. */ - bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 12); + bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 16); } elf_section_data (htab->elf.sgot->output_section) @@ -3953,19 +3949,4 @@ const struct elf_size_info s390_elf64_size_info = #define bfd_elf64_mkobject elf_s390_mkobject #define elf_backend_object_p elf_s390_object_p -/* Enable ELF64 archive functions. */ -#define bfd_elf64_archive_functions -extern bfd_boolean bfd_elf64_archive_slurp_armap (bfd *); -extern bfd_boolean bfd_elf64_archive_write_armap (bfd *, unsigned int, struct orl *, unsigned int, int); - -#define bfd_elf64_archive_slurp_extended_name_table _bfd_archive_coff_slurp_extended_name_table -#define bfd_elf64_archive_construct_extended_name_table _bfd_archive_coff_construct_extended_name_table -#define bfd_elf64_archive_truncate_arname _bfd_archive_coff_truncate_arname -#define bfd_elf64_archive_read_ar_hdr _bfd_archive_coff_read_ar_hdr -#define bfd_elf64_archive_write_ar_hdr _bfd_archive_coff_write_ar_hdr -#define bfd_elf64_archive_openr_next_archived_file _bfd_archive_coff_openr_next_archived_file -#define bfd_elf64_archive_get_elt_at_index _bfd_archive_coff_get_elt_at_index -#define bfd_elf64_archive_generic_stat_arch_elt _bfd_archive_coff_generic_stat_arch_elt -#define bfd_elf64_archive_update_armap_timestamp _bfd_archive_coff_update_armap_timestamp - #include "elf64-target.h" diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c index 645bce2..d963219 100644 --- a/bfd/elf64-sh64.c +++ b/bfd/elf64-sh64.c @@ -1508,10 +1508,10 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, datalabel processing here. Make sure this does not change without notice. */ if ((sym->st_other & STO_SH5_ISA32) != 0) - ((*info->callbacks->reloc_dangerous) - (info, - _("Unexpected STO_SH5_ISA32 on local symbol is not handled"), - input_bfd, input_section, rel->r_offset)); + (*info->callbacks->reloc_dangerous) + (info, + _("Unexpected STO_SH5_ISA32 on local symbol is not handled"), + input_bfd, input_section, rel->r_offset); if (sec != NULL && discarded_section (sec)) /* Handled below. */ @@ -1650,14 +1650,11 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; else if (!bfd_link_relocatable (info)) - { - 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; - } + (*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))); } if (sec != NULL && discarded_section (sec)) @@ -2081,11 +2078,9 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (*name == '\0') name = bfd_section_name (input_bfd, sec); } - 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; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); } break; } @@ -3817,21 +3812,19 @@ sh64_elf64_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTGOT: - name = ".got"; + name = ".got.plt"; 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; + s = bfd_get_linker_section (dynobj, name); + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf64_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); + s = bfd_get_linker_section (dynobj, ".rela.plt"); dyn.d_un.d_val = s->size; bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -3846,7 +3839,7 @@ sh64_elf64_finish_dynamic_sections (bfd *output_bfd, 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"); + s = bfd_get_linker_section (dynobj, ".rela.plt"); if (s != NULL) dyn.d_un.d_val -= s->size; bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon); diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index 1aa785b..c700b7e 100644 --- a/bfd/elf64-sparc.c +++ b/bfd/elf64-sparc.c @@ -426,11 +426,10 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, { static const char *const stt_types[] = { "NOTYPE", "OBJECT", "FUNCTION" }; - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; if (ELF_ST_TYPE (sym->st_info) == STT_REGISTER) { diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 463ce3a..c8bbed8 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -742,6 +742,20 @@ static const struct elf_x86_64_backend_data elf_x86_64_bnd_arch_bed = #define elf_backend_arch_data &elf_x86_64_arch_bed +/* Is a undefined weak symbol which is resolved to 0. Reference to an + undefined weak symbol is resolved to 0 when building executable if + it isn't dynamic and + 1. Has non-GOT/non-PLT relocations in text section. Or + 2. Has no GOT/PLT relocation. + */ +#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, GOT_RELOC, EH) \ + ((EH)->elf.root.type == bfd_link_hash_undefweak \ + && bfd_link_executable (INFO) \ + && (elf_x86_64_hash_table (INFO)->interp == NULL \ + || !(GOT_RELOC) \ + || (EH)->has_non_got_reloc \ + || !(INFO)->dynamic_undefined_weak)) + /* x86-64 ELF linker hash entry. */ struct elf_x86_64_link_hash_entry @@ -776,6 +790,17 @@ struct elf_x86_64_link_hash_entry /* TRUE if symbol has at least one BND relocation. */ unsigned int has_bnd_reloc : 1; + /* TRUE if symbol has GOT or PLT relocations. */ + unsigned int has_got_reloc : 1; + + /* TRUE if symbol has non-GOT/non-PLT relocations in text sections. */ + unsigned int has_non_got_reloc : 1; + + /* 0: symbol isn't __tls_get_addr. + 1: symbol is __tls_get_addr. + 2: symbol is unknown. */ + unsigned int tls_get_addr : 2; + /* Reference count of C/C++ function pointer relocations in read-write section which can be resolved at run-time. */ bfd_signed_vma func_pointer_refcount; @@ -835,6 +860,7 @@ struct elf_x86_64_link_hash_table struct elf_link_hash_table elf; /* Short-cuts to get to dynamic linker sections. */ + asection *interp; asection *sdynbss; asection *srelbss; asection *plt_eh_frame; @@ -879,6 +905,10 @@ struct elf_x86_64_link_hash_table bfd_vma next_jump_slot_index; /* The index of the next R_X86_64_IRELATIVE entry in .rela.plt. */ bfd_vma next_irelative_index; + + /* TRUE if there are dynamic relocs against IFUNC symbols that apply + to read-only sections. */ + bfd_boolean readonly_dynrelocs_against_ifunc; }; /* Get the x86-64 ELF linker hash table from a link_info structure. */ @@ -919,6 +949,9 @@ elf_x86_64_link_hash_newfunc (struct bfd_hash_entry *entry, eh->tls_type = GOT_UNKNOWN; eh->needs_copy = 0; eh->has_bnd_reloc = 0; + eh->has_got_reloc = 0; + eh->has_non_got_reloc = 0; + eh->tls_get_addr = 2; eh->func_pointer_refcount = 0; eh->plt_bnd.offset = (bfd_vma) -1; eh->plt_got.offset = (bfd_vma) -1; @@ -1082,6 +1115,17 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj, if (htab == NULL) return FALSE; + /* Set the contents of the .interp section to the interpreter. */ + if (bfd_link_executable (info) && !info->nointerp) + { + asection *s = bfd_get_linker_section (dynobj, ".interp"); + if (s == NULL) + abort (); + s->size = htab->dynamic_interpreter_size; + s->contents = (unsigned char *) htab->dynamic_interpreter; + htab->interp = s; + } + htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); if (!htab->sdynbss) abort (); @@ -1118,6 +1162,17 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj, || !bfd_set_section_alignment (dynobj, htab->plt_eh_frame, 3)) return FALSE; } + + /* Align .got section to its entry size. */ + if (htab->elf.sgot != NULL + && !bfd_set_section_alignment (dynobj, htab->elf.sgot, 3)) + return FALSE; + + /* Align .got.plt section to its entry size. */ + if (htab->elf.sgotplt != NULL + && !bfd_set_section_alignment (dynobj, htab->elf.sgotplt, 3)) + return FALSE; + return TRUE; } @@ -1136,6 +1191,12 @@ elf_x86_64_copy_indirect_symbol (struct bfd_link_info *info, if (!edir->has_bnd_reloc) edir->has_bnd_reloc = eind->has_bnd_reloc; + if (!edir->has_got_reloc) + edir->has_got_reloc = eind->has_got_reloc; + + if (!edir->has_non_got_reloc) + edir->has_non_got_reloc = eind->has_non_got_reloc; + if (eind->dyn_relocs != NULL) { if (edir->dyn_relocs != NULL) @@ -1235,22 +1296,8 @@ elf_x86_64_check_tls_transition (bfd *abfd, struct elf_link_hash_entry *h; bfd_vma offset; struct elf_x86_64_link_hash_table *htab; - - /* 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; - } - } + bfd_byte *call; + bfd_boolean indirect_call, tls_get_addr; htab = elf_x86_64_hash_table (info); offset = rel->r_offset; @@ -1265,32 +1312,61 @@ elf_x86_64_check_tls_transition (bfd *abfd, { /* Check transition from GD access model. For 64bit, only .byte 0x66; leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr + .word 0x6666; rex64; call __tls_get_addr@PLT + or + .byte 0x66; leaq foo@tlsgd(%rip), %rdi + .byte 0x66; rex64 + call *__tls_get_addr@GOTPCREL(%rip) + which may be converted to + addr32 call __tls_get_addr can transit to different access model. For 32bit, only leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr - can transit to different access model. For largepic + .word 0x6666; rex64; call __tls_get_addr@PLT + or + leaq foo@tlsgd(%rip), %rdi + .byte 0x66; rex64 + call *__tls_get_addr@GOTPCREL(%rip) + which may be converted to + addr32 call __tls_get_addr + can transit to different access model. For largepic, we also support: leaq foo@tlsgd(%rip), %rdi movabsq $__tls_get_addr@pltoff, %rax + addq $r15, %rax + call *%rax + or + leaq foo@tlsgd(%rip), %rdi + movabsq $__tls_get_addr@pltoff, %rax addq $rbx, %rax - call *%rax. */ + call *%rax */ - static const unsigned char call[] = { 0x66, 0x66, 0x48, 0xe8 }; static const unsigned char leaq[] = { 0x66, 0x48, 0x8d, 0x3d }; if ((offset + 12) > sec->size) return FALSE; - if (memcmp (contents + offset + 4, call, 4) != 0) + call = contents + offset + 4; + if (call[0] != 0x66 + || !((call[1] == 0x48 + && call[2] == 0xff + && call[3] == 0x15) + || (call[1] == 0x48 + && call[2] == 0x67 + && call[3] == 0xe8) + || (call[1] == 0x66 + && call[2] == 0x48 + && call[3] == 0xe8))) { if (!ABI_64_P (abfd) || (offset + 19) > sec->size || offset < 3 - || memcmp (contents + offset - 3, leaq + 1, 3) != 0 - || memcmp (contents + offset + 4, "\x48\xb8", 2) != 0 - || memcmp (contents + offset + 14, "\x48\x01\xd8\xff\xd0", 5) - != 0) + || memcmp (call - 7, leaq + 1, 3) != 0 + || memcmp (call, "\x48\xb8", 2) != 0 + || call[11] != 0x01 + || call[13] != 0xff + || call[14] != 0xd0 + || !((call[10] == 0x48 && call[12] == 0xd8) + || (call[10] == 0x4c && call[12] == 0xf8))) return FALSE; largepic = TRUE; } @@ -1306,18 +1382,29 @@ elf_x86_64_check_tls_transition (bfd *abfd, || memcmp (contents + offset - 3, leaq + 1, 3) != 0) return FALSE; } + indirect_call = call[2] == 0xff; } else { /* Check transition from LD access model. Only leaq foo@tlsld(%rip), %rdi; - call __tls_get_addr + call __tls_get_addr@PLT + or + leaq foo@tlsld(%rip), %rdi; + call *__tls_get_addr@GOTPCREL(%rip) + which may be converted to + addr32 call __tls_get_addr can transit to different access model. For largepic we also support: leaq foo@tlsld(%rip), %rdi movabsq $__tls_get_addr@pltoff, %rax + addq $r15, %rax + call *%rax + or + leaq foo@tlsld(%rip), %rdi + movabsq $__tls_get_addr@pltoff, %rax addq $rbx, %rax - call *%rax. */ + call *%rax */ static const unsigned char lea[] = { 0x48, 0x8d, 0x3d }; @@ -1327,33 +1414,60 @@ elf_x86_64_check_tls_transition (bfd *abfd, if (memcmp (contents + offset - 3, lea, 3) != 0) return FALSE; - if (0xe8 != *(contents + offset + 4)) + call = contents + offset + 4; + if (!(call[0] == 0xe8 + || (call[0] == 0xff && call[1] == 0x15) + || (call[0] == 0x67 && call[1] == 0xe8))) { if (!ABI_64_P (abfd) || (offset + 19) > sec->size - || memcmp (contents + offset + 4, "\x48\xb8", 2) != 0 - || memcmp (contents + offset + 14, "\x48\x01\xd8\xff\xd0", 5) - != 0) + || memcmp (call, "\x48\xb8", 2) != 0 + || call[11] != 0x01 + || call[13] != 0xff + || call[14] != 0xd0 + || !((call[10] == 0x48 && call[12] == 0xd8) + || (call[10] == 0x4c && call[12] == 0xf8))) return FALSE; largepic = TRUE; } + indirect_call = call[0] == 0xff; } r_symndx = htab->r_sym (rel[1].r_info); if (r_symndx < symtab_hdr->sh_info) return FALSE; + tls_get_addr = 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 - && (largepic - ? ELF32_R_TYPE (rel[1].r_info) == R_X86_64_PLTOFF64 - : (ELF32_R_TYPE (rel[1].r_info) == R_X86_64_PC32 - || ELF32_R_TYPE (rel[1].r_info) == R_X86_64_PLT32)) - && (strncmp (h->root.root.string, - "__tls_get_addr", 14) == 0)); + if (h != NULL && h->root.root.string != NULL) + { + struct elf_x86_64_link_hash_entry *eh + = (struct elf_x86_64_link_hash_entry *) h; + tls_get_addr = eh->tls_get_addr == 1; + if (eh->tls_get_addr > 1) + { + /* Use strncmp to check __tls_get_addr since + __tls_get_addr may be versioned. */ + if (strncmp (h->root.root.string, "__tls_get_addr", 14) + == 0) + { + eh->tls_get_addr = 1; + tls_get_addr = TRUE; + } + else + eh->tls_get_addr = 0; + } + } + + if (!tls_get_addr) + return FALSE; + else if (largepic) + return ELF32_R_TYPE (rel[1].r_info) == R_X86_64_PLTOFF64; + else if (indirect_call) + return ELF32_R_TYPE (rel[1].r_info) == R_X86_64_GOTPCRELX; + else + return (ELF32_R_TYPE (rel[1].r_info) == R_X86_64_PC32 + || ELF32_R_TYPE (rel[1].r_info) == R_X86_64_PLT32); case R_X86_64_GOTTPOFF: /* Check transition from IE access model: @@ -1416,8 +1530,8 @@ elf_x86_64_check_tls_transition (bfd *abfd, if (offset + 2 <= sec->size) { /* Make sure that it's a call *x@tlsdesc(%rax). */ - static const unsigned char call[] = { 0xff, 0x10 }; - return memcmp (contents + offset, call, 2) == 0; + call = contents + offset; + return call[0] == 0xff && call[1] == 0x10; } return FALSE; @@ -1439,7 +1553,8 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, const Elf_Internal_Rela *rel, const Elf_Internal_Rela *relend, struct elf_link_hash_entry *h, - unsigned long r_symndx) + unsigned long r_symndx, + bfd_boolean from_relocate_section) { unsigned int from_type = *r_type; unsigned int to_type = from_type; @@ -1465,10 +1580,9 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, to_type = R_X86_64_GOTTPOFF; } - /* When we are called from elf_x86_64_relocate_section, - CONTENTS isn't NULL and there may be additional transitions - based on TLS_TYPE. */ - if (contents != NULL) + /* When we are called from elf_x86_64_relocate_section, there may + be additional transitions based on TLS_TYPE. */ + if (from_relocate_section) { unsigned int new_to_type = to_type; @@ -1554,7 +1668,470 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, /* Rename some of the generic section flags to better document how they are used here. */ -#define need_convert_load sec_flg0 +#define need_convert_load sec_flg0 +#define check_relocs_failed sec_flg1 + +static bfd_boolean +elf_x86_64_need_pic (bfd *input_bfd, asection *sec, + struct elf_link_hash_entry *h, + Elf_Internal_Shdr *symtab_hdr, + Elf_Internal_Sym *isym, + reloc_howto_type *howto) +{ + const char *v = ""; + const char *und = ""; + const char *pic = ""; + + const char *name; + if (h) + { + name = h->root.root.string; + 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 && !h->def_dynamic) + und = _("undefined "); + } + else + { + name = bfd_elf_sym_name (input_bfd, symtab_hdr, isym, NULL); + pic = _("; recompile with -fPIC"); + } + + (*_bfd_error_handler) (_("%B: relocation %s against %s%s`%s' can " + "not be used when making a shared object%s"), + input_bfd, howto->name, und, v, name, pic); + bfd_set_error (bfd_error_bad_value); + sec->check_relocs_failed = 1; + return FALSE; +} + +/* With the local symbol, foo, we convert + mov foo@GOTPCREL(%rip), %reg + to + lea foo(%rip), %reg + and convert + call/jmp *foo@GOTPCREL(%rip) + to + nop call foo/jmp foo nop + When PIC is false, convert + test %reg, foo@GOTPCREL(%rip) + to + test $foo, %reg + and convert + binop foo@GOTPCREL(%rip), %reg + to + binop $foo, %reg + where binop is one of adc, add, and, cmp, or, sbb, sub, xor + instructions. */ + +static bfd_boolean +elf_x86_64_convert_load_reloc (bfd *abfd, asection *sec, + bfd_byte *contents, + Elf_Internal_Rela *irel, + struct elf_link_hash_entry *h, + bfd_boolean *converted, + struct bfd_link_info *link_info) +{ + struct elf_x86_64_link_hash_table *htab; + bfd_boolean is_pic; + bfd_boolean require_reloc_pc32; + bfd_boolean relocx; + bfd_boolean to_reloc_pc32; + asection *tsec; + char symtype; + bfd_signed_vma raddend; + unsigned int opcode; + unsigned int modrm; + unsigned int r_type = ELF32_R_TYPE (irel->r_info); + unsigned int r_symndx; + bfd_vma toff; + bfd_vma roff = irel->r_offset; + + if (roff < (r_type == R_X86_64_REX_GOTPCRELX ? 3 : 2)) + return TRUE; + + raddend = irel->r_addend; + /* Addend for 32-bit PC-relative relocation must be -4. */ + if (raddend != -4) + return TRUE; + + htab = elf_x86_64_hash_table (link_info); + is_pic = bfd_link_pic (link_info); + + relocx = (r_type == R_X86_64_GOTPCRELX + || r_type == R_X86_64_REX_GOTPCRELX); + + /* TRUE if we can convert only to R_X86_64_PC32. Enable it for + --no-relax. */ + require_reloc_pc32 + = link_info->disable_target_specific_optimizations > 1; + + r_symndx = htab->r_sym (irel->r_info); + + opcode = bfd_get_8 (abfd, contents + roff - 2); + + /* Convert mov to lea since it has been done for a while. */ + if (opcode != 0x8b) + { + /* Only convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX + for call, jmp or one of adc, add, and, cmp, or, sbb, sub, + test, xor instructions. */ + if (!relocx) + return TRUE; + } + + /* We convert only to R_X86_64_PC32: + 1. Branch. + 2. R_X86_64_GOTPCREL since we can't modify REX byte. + 3. require_reloc_pc32 is true. + 4. PIC. + */ + to_reloc_pc32 = (opcode == 0xff + || !relocx + || require_reloc_pc32 + || is_pic); + + /* Get the symbol referred to by the reloc. */ + if (h == NULL) + { + Elf_Internal_Sym *isym + = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); + + /* Skip relocation against undefined symbols. */ + if (isym->st_shndx == SHN_UNDEF) + return TRUE; + + symtype = ELF_ST_TYPE (isym->st_info); + + if (isym->st_shndx == SHN_ABS) + tsec = bfd_abs_section_ptr; + else if (isym->st_shndx == SHN_COMMON) + tsec = bfd_com_section_ptr; + else if (isym->st_shndx == SHN_X86_64_LCOMMON) + tsec = &_bfd_elf_large_com_section; + else + tsec = bfd_section_from_elf_index (abfd, isym->st_shndx); + + toff = isym->st_value; + } + else + { + /* Undefined weak symbol is only bound locally in executable + and its reference is resolved as 0 without relocation + overflow. We can only perform this optimization for + GOTPCRELX relocations since we need to modify REX byte. + It is OK convert mov with R_X86_64_GOTPCREL to + R_X86_64_PC32. */ + if ((relocx || opcode == 0x8b) + && UNDEFINED_WEAK_RESOLVED_TO_ZERO (link_info, + TRUE, + elf_x86_64_hash_entry (h))) + { + if (opcode == 0xff) + { + /* Skip for branch instructions since R_X86_64_PC32 + may overflow. */ + if (require_reloc_pc32) + return TRUE; + } + else if (relocx) + { + /* For non-branch instructions, we can convert to + R_X86_64_32/R_X86_64_32S since we know if there + is a REX byte. */ + to_reloc_pc32 = FALSE; + } + + /* Since we don't know the current PC when PIC is true, + we can't convert to R_X86_64_PC32. */ + if (to_reloc_pc32 && is_pic) + return TRUE; + + goto convert; + } + /* Avoid optimizing GOTPCREL relocations againt _DYNAMIC since + ld.so may use its link-time address. */ + else if ((h->def_regular + || h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && h != htab->elf.hdynamic + && SYMBOL_REFERENCES_LOCAL (link_info, h)) + { + /* bfd_link_hash_new or bfd_link_hash_undefined is + set by an assignment in a linker script in + bfd_elf_record_link_assignment. */ + if (h->def_regular + && (h->root.type == bfd_link_hash_new + || h->root.type == bfd_link_hash_undefined)) + { + /* Skip since R_X86_64_32/R_X86_64_32S may overflow. */ + if (require_reloc_pc32) + return TRUE; + goto convert; + } + tsec = h->root.u.def.section; + toff = h->root.u.def.value; + symtype = h->type; + } + else + return TRUE; + } + + /* Don't convert GOTPCREL relocation against large section. */ + if (elf_section_data (tsec) != NULL + && (elf_section_flags (tsec) & SHF_X86_64_LARGE) != 0) + return TRUE; + + /* We can only estimate relocation overflow for R_X86_64_PC32. */ + if (!to_reloc_pc32) + goto convert; + + if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE) + { + /* At this stage in linking, no SEC_MERGE symbol has been + adjusted, so all references to such symbols need to be + passed through _bfd_merged_section_offset. (Later, in + relocate_section, all SEC_MERGE symbols *except* for + section symbols have been adjusted.) + + 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 (symtype == STT_SECTION) + toff += raddend; + + toff = _bfd_merged_section_offset (abfd, &tsec, + elf_section_data (tsec)->sec_info, + toff); + + if (symtype != STT_SECTION) + toff += raddend; + } + else + toff += raddend; + + /* Don't convert if R_X86_64_PC32 relocation overflows. */ + if (tsec->output_section == sec->output_section) + { + if ((toff - roff + 0x80000000) > 0xffffffff) + return TRUE; + } + else + { + bfd_signed_vma distance; + + /* At this point, we don't know the load addresses of TSEC + section nor SEC section. We estimate the distrance between + SEC and TSEC. We store the estimated distances in the + compressed_size field of the output section, which is only + used to decompress the compressed input section. */ + if (sec->output_section->compressed_size == 0) + { + asection *asect; + bfd_size_type size = 0; + for (asect = link_info->output_bfd->sections; + asect != NULL; + asect = asect->next) + /* Skip debug sections since compressed_size is used to + compress debug sections. */ + if ((asect->flags & SEC_DEBUGGING) == 0) + { + asection *i; + for (i = asect->map_head.s; + i != NULL; + i = i->map_head.s) + { + size = align_power (size, i->alignment_power); + size += i->size; + } + asect->compressed_size = size; + } + } + + /* Don't convert GOTPCREL relocations if TSEC isn't placed + after SEC. */ + distance = (tsec->output_section->compressed_size + - sec->output_section->compressed_size); + if (distance < 0) + return TRUE; + + /* Take PT_GNU_RELRO segment into account by adding + maxpagesize. */ + if ((toff + distance + get_elf_backend_data (abfd)->maxpagesize + - roff + 0x80000000) > 0xffffffff) + return TRUE; + } + +convert: + if (opcode == 0xff) + { + /* We have "call/jmp *foo@GOTPCREL(%rip)". */ + unsigned int nop; + unsigned int disp; + bfd_vma nop_offset; + + /* Convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX to + R_X86_64_PC32. */ + modrm = bfd_get_8 (abfd, contents + roff - 1); + if (modrm == 0x25) + { + /* Convert to "jmp foo nop". */ + modrm = 0xe9; + nop = NOP_OPCODE; + nop_offset = irel->r_offset + 3; + disp = bfd_get_32 (abfd, contents + irel->r_offset); + irel->r_offset -= 1; + bfd_put_32 (abfd, disp, contents + irel->r_offset); + } + else + { + struct elf_x86_64_link_hash_entry *eh + = (struct elf_x86_64_link_hash_entry *) h; + + /* Convert to "nop call foo". ADDR_PREFIX_OPCODE + is a nop prefix. */ + modrm = 0xe8; + /* To support TLS optimization, always use addr32 prefix for + "call *__tls_get_addr@GOTPCREL(%rip)". */ + if (eh && eh->tls_get_addr == 1) + { + nop = 0x67; + nop_offset = irel->r_offset - 2; + } + else + { + nop = link_info->call_nop_byte; + if (link_info->call_nop_as_suffix) + { + nop_offset = irel->r_offset + 3; + disp = bfd_get_32 (abfd, contents + irel->r_offset); + irel->r_offset -= 1; + bfd_put_32 (abfd, disp, contents + irel->r_offset); + } + else + nop_offset = irel->r_offset - 2; + } + } + bfd_put_8 (abfd, nop, contents + nop_offset); + bfd_put_8 (abfd, modrm, contents + irel->r_offset - 1); + r_type = R_X86_64_PC32; + } + else + { + unsigned int rex; + unsigned int rex_mask = REX_R; + + if (r_type == R_X86_64_REX_GOTPCRELX) + rex = bfd_get_8 (abfd, contents + roff - 3); + else + rex = 0; + + if (opcode == 0x8b) + { + if (to_reloc_pc32) + { + /* Convert "mov foo@GOTPCREL(%rip), %reg" to + "lea foo(%rip), %reg". */ + opcode = 0x8d; + r_type = R_X86_64_PC32; + } + else + { + /* Convert "mov foo@GOTPCREL(%rip), %reg" to + "mov $foo, %reg". */ + opcode = 0xc7; + modrm = bfd_get_8 (abfd, contents + roff - 1); + modrm = 0xc0 | (modrm & 0x38) >> 3; + if ((rex & REX_W) != 0 + && ABI_64_P (link_info->output_bfd)) + { + /* Keep the REX_W bit in REX byte for LP64. */ + r_type = R_X86_64_32S; + goto rewrite_modrm_rex; + } + else + { + /* If the REX_W bit in REX byte isn't needed, + use R_X86_64_32 and clear the W bit to avoid + sign-extend imm32 to imm64. */ + r_type = R_X86_64_32; + /* Clear the W bit in REX byte. */ + rex_mask |= REX_W; + goto rewrite_modrm_rex; + } + } + } + else + { + /* R_X86_64_PC32 isn't supported. */ + if (to_reloc_pc32) + return TRUE; + + modrm = bfd_get_8 (abfd, contents + roff - 1); + if (opcode == 0x85) + { + /* Convert "test %reg, foo@GOTPCREL(%rip)" to + "test $foo, %reg". */ + modrm = 0xc0 | (modrm & 0x38) >> 3; + opcode = 0xf7; + } + else + { + /* Convert "binop foo@GOTPCREL(%rip), %reg" to + "binop $foo, %reg". */ + modrm = 0xc0 | (modrm & 0x38) >> 3 | (opcode & 0x3c); + opcode = 0x81; + } + + /* Use R_X86_64_32 with 32-bit operand to avoid relocation + overflow when sign-extending imm32 to imm64. */ + r_type = (rex & REX_W) != 0 ? R_X86_64_32S : R_X86_64_32; + +rewrite_modrm_rex: + bfd_put_8 (abfd, modrm, contents + roff - 1); + + if (rex) + { + /* Move the R bit to the B bit in REX byte. */ + rex = (rex & ~rex_mask) | (rex & REX_R) >> 2; + bfd_put_8 (abfd, rex, contents + roff - 3); + } + + /* No addend for R_X86_64_32/R_X86_64_32S relocations. */ + irel->r_addend = 0; + } + + bfd_put_8 (abfd, opcode, contents + roff - 2); + } + + irel->r_info = htab->r_info (r_symndx, r_type); + + *converted = TRUE; + + return TRUE; +} /* Look through the relocs for a section during the first phase, and calculate needed space in the global offset table, procedure @@ -1571,16 +2148,38 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; asection *sreloc; + bfd_byte *contents; bfd_boolean use_plt_got; if (bfd_link_relocatable (info)) return TRUE; + /* Don't do anything special with non-loaded, non-alloced sections. + In particular, any relocs in such sections should not affect GOT + and PLT reference counting (ie. we don't allow them to create GOT + or PLT entries), there's no possibility or desire to optimize TLS + relocs, and there's not much point in propagating relocs to shared + libs that the dynamic linker won't relocate. */ + if ((sec->flags & SEC_ALLOC) == 0) + return TRUE; + BFD_ASSERT (is_x86_64_elf (abfd)); htab = elf_x86_64_hash_table (info); if (htab == NULL) - return FALSE; + { + sec->check_relocs_failed = 1; + return FALSE; + } + + /* Get the section contents. */ + 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)) + { + sec->check_relocs_failed = 1; + return FALSE; + } use_plt_got = get_elf_x86_64_backend_data (abfd) == &elf_x86_64_arch_bed; @@ -1595,6 +2194,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, unsigned int r_type; unsigned long r_symndx; struct elf_link_hash_entry *h; + struct elf_x86_64_link_hash_entry *eh; Elf_Internal_Sym *isym; const char *name; bfd_boolean size_reloc; @@ -1606,7 +2206,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, { (*_bfd_error_handler) (_("%B: bad symbol index: %d"), abfd, r_symndx); - return FALSE; + goto error_return; } if (r_symndx < symtab_hdr->sh_info) @@ -1615,7 +2215,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); if (isym == NULL) - return FALSE; + goto error_return; /* Check relocation against local STT_GNU_IFUNC symbol. */ if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) @@ -1623,7 +2223,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, h = elf_x86_64_get_local_sym_hash (htab, abfd, rel, TRUE); if (h == NULL) - return FALSE; + goto error_return; /* Fake a STT_GNU_IFUNC symbol. */ h->type = STT_GNU_IFUNC; @@ -1671,17 +2271,13 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, "supported in x32 mode"), abfd, x86_64_elf_howto_table[r_type].name, name); bfd_set_error (bfd_error_bad_value); - return FALSE; + goto error_return; } break; } 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: @@ -1728,7 +2324,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, || !bfd_set_section_alignment (htab->elf.dynobj, htab->plt_bnd, plt_bnd_align)) - return FALSE; + goto error_return; } } @@ -1740,8 +2336,11 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_X86_64_GOTPCREL64: if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - if (!_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info)) - return FALSE; + /* Create the ifunc sections for static executables. */ + if (h->type == STT_GNU_IFUNC + && !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, + info)) + goto error_return; break; } @@ -1754,12 +2353,13 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, |= elf_gnu_symbol_ifunc; } - if (! elf_x86_64_tls_transition (info, abfd, sec, NULL, + if (! elf_x86_64_tls_transition (info, abfd, sec, contents, symtab_hdr, sym_hashes, &r_type, GOT_UNKNOWN, - rel, rel_end, h, r_symndx)) - return FALSE; + rel, rel_end, h, r_symndx, FALSE)) + goto error_return; + eh = (struct elf_x86_64_link_hash_entry *) h; switch (r_type) { case R_X86_64_TLSLD: @@ -1768,19 +2368,10 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_X86_64_TPOFF32: if (!bfd_link_executable (info) && ABI_64_P (abfd)) - { - 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, name); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } + return elf_x86_64_need_pic (abfd, sec, h, symtab_hdr, isym, + &x86_64_elf_howto_table[r_type]); + if (eh != NULL) + eh->has_got_reloc = 1; break; case R_X86_64_GOTTPOFF: @@ -1815,7 +2406,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, if (h != NULL) { h->got.refcount += 1; - old_tls_type = elf_x86_64_hash_entry (h)->tls_type; + old_tls_type = eh->tls_type; } else { @@ -1833,7 +2424,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, local_got_refcounts = ((bfd_signed_vma *) bfd_zalloc (abfd, size)); if (local_got_refcounts == NULL) - return FALSE; + goto error_return; elf_local_got_refcounts (abfd) = local_got_refcounts; elf_x86_64_local_tlsdesc_gotent (abfd) = (bfd_vma *) (local_got_refcounts + symtab_hdr->sh_info); @@ -1867,14 +2458,14 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, (_("%B: '%s' accessed both as normal and thread local symbol"), abfd, name); bfd_set_error (bfd_error_bad_value); - return FALSE; + goto error_return; } } if (old_tls_type != tls_type) { - if (h != NULL) - elf_x86_64_hash_entry (h)->tls_type = tls_type; + if (eh != NULL) + eh->tls_type = tls_type; else elf_x86_64_local_got_tls_type (abfd) [r_symndx] = tls_type; } @@ -1885,13 +2476,15 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_X86_64_GOTPC32: case R_X86_64_GOTPC64: create_got: + if (eh != NULL) + eh->has_got_reloc = 1; if (htab->elf.sgot == NULL) { if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; if (!_bfd_elf_create_got_section (htab->elf.dynobj, info)) - return FALSE; + goto error_return; } break; @@ -1909,6 +2502,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, if (h == NULL) continue; + eh->has_got_reloc = 1; h->needs_plt = 1; h->plt.refcount += 1; break; @@ -1934,24 +2528,19 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_X86_64_8: case R_X86_64_16: case R_X86_64_32S: - /* Let's help debug shared library creation. These relocs - cannot be used in shared libs. Don't error out for + /* Check relocation overflow as these relocs may lead to + run-time relocation overflow. Don't error out for sections we don't care about, such as debug sections or - non-constant sections. */ - if (bfd_link_pic (info) - && (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, name); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } + when relocation overflow check is disabled. */ + if (!info->no_reloc_overflow_check + && (bfd_link_pic (info) + || (bfd_link_executable (info) + && h != NULL + && !h->def_regular + && h->def_dynamic + && (sec->flags & SEC_READONLY) == 0))) + return elf_x86_64_need_pic (abfd, sec, h, symtab_hdr, isym, + &x86_64_elf_howto_table[r_type]); /* Fall through. */ case R_X86_64_PC8: @@ -1961,7 +2550,14 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_X86_64_PC64: case R_X86_64_64: pointer: - if (h != NULL && bfd_link_executable (info)) + if (eh != NULL && (sec->flags & SEC_CODE) != 0) + eh->has_non_got_reloc = 1; + /* We are called after all symbols have been resolved. Only + relocation against STT_GNU_IFUNC symbol must go through + PLT. */ + if (h != NULL + && (bfd_link_executable (info) + || h->type == STT_GNU_IFUNC)) { /* If this reloc is in a read-only section, we might need a copy reloc. We can't check reliably at this @@ -1971,9 +2567,13 @@ pointer: adjust_dynamic_symbol. */ h->non_got_ref = 1; - /* We may need a .plt entry if the function this reloc - refers to is in a shared lib. */ - h->plt.refcount += 1; + /* We may need a .plt entry if the symbol is a function + defined in a shared lib or is a STT_GNU_IFUNC function + referenced from the code or read-only section. */ + if (!h->def_regular + || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0) + h->plt.refcount += 1; + if (r_type == R_X86_64_PC32) { /* Since something like ".long foo - ." may be used @@ -1994,11 +2594,7 @@ pointer: || (!ABI_64_P (abfd) && (r_type == R_X86_64_32 || r_type == R_X86_64_32S)))) - { - struct elf_x86_64_link_hash_entry *eh - = (struct elf_x86_64_link_hash_entry *) h; - eh->func_pointer_refcount += 1; - } + eh->func_pointer_refcount += 1; } } @@ -2024,17 +2620,23 @@ do_size: 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. */ + symbol. + + Generate dynamic pointer relocation against STT_GNU_IFUNC + symbol in the non-code section. */ if ((bfd_link_pic (info) - && (sec->flags & SEC_ALLOC) != 0 && (! IS_X86_64_PCREL_TYPE (r_type) || (h != NULL - && (! SYMBOLIC_BIND (info, h) + && (! (bfd_link_pie (info) + || SYMBOLIC_BIND (info, h)) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) + || (h != NULL + && h->type == STT_GNU_IFUNC + && r_type == htab->pointer_r_type + && (sec->flags & SEC_CODE) == 0) || (ELIMINATE_COPY_RELOCS && !bfd_link_pic (info) - && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak || !h->def_regular))) @@ -2055,15 +2657,13 @@ do_size: abfd, /*rela?*/ TRUE); if (sreloc == NULL) - return FALSE; + goto error_return; } /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - { - head = &((struct elf_x86_64_link_hash_entry *) h)->dyn_relocs; - } + head = &eh->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -2075,7 +2675,7 @@ do_size: isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); if (isym == NULL) - return FALSE; + goto error_return; s = bfd_section_from_elf_index (abfd, isym->st_shndx); if (s == NULL) @@ -2095,7 +2695,7 @@ do_size: p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) - return FALSE; + goto error_return; p->next = *head; *head = p; p->sec = sec; @@ -2114,7 +2714,7 @@ do_size: Reconstruct it for later use during GC. */ case R_X86_64_GNU_VTINHERIT: if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) - return FALSE; + goto error_return; break; /* This relocation describes which C++ vtable entries are actually @@ -2123,7 +2723,7 @@ do_size: BFD_ASSERT (h != NULL); if (h != NULL && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) - return FALSE; + goto error_return; break; default: @@ -2161,7 +2761,7 @@ do_size: || !bfd_set_section_alignment (htab->elf.dynobj, htab->plt_got, plt_got_align)) - return FALSE; + goto error_return; } if ((r_type == R_X86_64_GOTPCREL @@ -2171,7 +2771,24 @@ do_size: sec->need_convert_load = 1; } + if (elf_section_data (sec)->this_hdr.contents != contents) + { + if (!info->keep_memory) + free (contents); + else + { + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents = contents; + } + } + return TRUE; + +error_return: + if (elf_section_data (sec)->this_hdr.contents != contents) + free (contents); + sec->check_relocs_failed = 1; + return FALSE; } /* Return the section that should be marked against GC for a given @@ -2195,171 +2812,22 @@ elf_x86_64_gc_mark_hook (asection *sec, return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); } -/* Update the got entry reference counts for the section being removed. */ +/* Remove undefined weak symbol from the dynamic symbol table if it + is resolved to 0. */ static bfd_boolean -elf_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, - asection *sec, - const Elf_Internal_Rela *relocs) +elf_x86_64_fixup_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *h) { - struct elf_x86_64_link_hash_table *htab; - 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 (bfd_link_relocatable (info)) - return TRUE; - - htab = elf_x86_64_hash_table (info); - if (htab == NULL) - return FALSE; - - elf_section_data (sec)->local_dynrel = NULL; - - symtab_hdr = &elf_symtab_hdr (abfd); - sym_hashes = elf_sym_hashes (abfd); - local_got_refcounts = elf_local_got_refcounts (abfd); - - htab = elf_x86_64_hash_table (info); - relend = relocs + sec->reloc_count; - for (rel = relocs; rel < relend; rel++) + if (h->dynindx != -1 + && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + elf_x86_64_hash_entry (h)->has_got_reloc, + elf_x86_64_hash_entry (h))) { - unsigned long r_symndx; - unsigned int r_type; - struct elf_link_hash_entry *h = NULL; - bfd_boolean pointer_reloc; - - r_symndx = htab->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; - } - else - { - /* A local symbol. */ - Elf_Internal_Sym *isym; - - isym = bfd_sym_from_r_symndx (&htab->sym_cache, - abfd, r_symndx); - - /* Check relocation against local STT_GNU_IFUNC symbol. */ - if (isym != NULL - && ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) - { - h = elf_x86_64_get_local_sym_hash (htab, abfd, rel, FALSE); - if (h == NULL) - abort (); - } - } - - if (h) - { - struct elf_x86_64_link_hash_entry *eh; - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - eh = (struct elf_x86_64_link_hash_entry *) h; - - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next) - if (p->sec == sec) - { - /* Everything must go for SEC. */ - *pp = p->next; - break; - } - } - - r_type = ELF32_R_TYPE (rel->r_info); - if (! elf_x86_64_tls_transition (info, abfd, sec, NULL, - symtab_hdr, sym_hashes, - &r_type, GOT_UNKNOWN, - rel, relend, h, r_symndx)) - return FALSE; - - pointer_reloc = FALSE; - switch (r_type) - { - case R_X86_64_TLSLD: - if (htab->tls_ld_got.refcount > 0) - htab->tls_ld_got.refcount -= 1; - break; - - case R_X86_64_TLSGD: - case R_X86_64_GOTPC32_TLSDESC: - case R_X86_64_TLSDESC_CALL: - case R_X86_64_GOTTPOFF: - case R_X86_64_GOT32: - case R_X86_64_GOTPCREL: - case R_X86_64_GOTPCRELX: - case R_X86_64_REX_GOTPCRELX: - case R_X86_64_GOT64: - case R_X86_64_GOTPCREL64: - case R_X86_64_GOTPLT64: - if (h != NULL) - { - if (h->got.refcount > 0) - h->got.refcount -= 1; - if (h->type == STT_GNU_IFUNC) - { - if (h->plt.refcount > 0) - h->plt.refcount -= 1; - } - } - else if (local_got_refcounts != NULL) - { - if (local_got_refcounts[r_symndx] > 0) - local_got_refcounts[r_symndx] -= 1; - } - break; - - case R_X86_64_32: - case R_X86_64_32S: - pointer_reloc = !ABI_64_P (abfd); - goto pointer; - - case R_X86_64_64: - pointer_reloc = TRUE; - case R_X86_64_8: - case R_X86_64_16: - case R_X86_64_PC8: - case R_X86_64_PC16: - case R_X86_64_PC32: - case R_X86_64_PC32_BND: - case R_X86_64_PC64: - case R_X86_64_SIZE32: - case R_X86_64_SIZE64: -pointer: - if (bfd_link_pic (info) - && (h == NULL || h->type != STT_GNU_IFUNC)) - break; - /* Fall thru */ - - case R_X86_64_PLT32: - case R_X86_64_PLT32_BND: - case R_X86_64_PLTOFF64: - if (h != NULL) - { - if (h->plt.refcount > 0) - h->plt.refcount -= 1; - if (pointer_reloc && (sec->flags & SEC_READONLY) == 0) - { - struct elf_x86_64_link_hash_entry *eh - = (struct elf_x86_64_link_hash_entry *) h; - if (eh->func_pointer_refcount > 0) - eh->func_pointer_refcount -= 1; - } - } - break; - - default: - break; - } + h->dynindx = -1; + _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr, + h->dynstr_index); } - return TRUE; } @@ -2404,12 +2872,17 @@ elf_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info, if (pc_count || count) { - h->needs_plt = 1; h->non_got_ref = 1; - if (h->plt.refcount <= 0) - h->plt.refcount = 1; - else - h->plt.refcount += 1; + if (pc_count) + { + /* Increment PLT reference count only for PC-relative + references. */ + h->needs_plt = 1; + if (h->plt.refcount <= 0) + h->plt.refcount = 1; + else + h->plt.refcount += 1; + } } } @@ -2552,6 +3025,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) struct elf_dyn_relocs *p; const struct elf_backend_data *bed; unsigned int plt_entry_size; + bfd_boolean resolved_to_zero; if (h->root.type == bfd_link_hash_indirect) return TRUE; @@ -2565,6 +3039,10 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) bed = get_elf_backend_data (info->output_bfd); plt_entry_size = GET_PLT_ENTRY_SIZE (info->output_bfd); + resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + eh->has_got_reloc, + eh); + /* We can't use the GOT PLT if pointer equality is needed since finish_dynamic_symbol won't clear symbol value and the dynamic linker won't update the GOT slot. We will get into an infinite @@ -2595,9 +3073,10 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) { if (_bfd_elf_allocate_ifunc_dyn_relocs (info, h, &eh->dyn_relocs, + &htab->readonly_dynrelocs_against_ifunc, plt_entry_size, plt_entry_size, - GOT_ENTRY_SIZE)) + GOT_ENTRY_SIZE, TRUE)) { asection *s = htab->plt_bnd; if (h->plt.offset != (bfd_vma) -1 && s != NULL) @@ -2641,7 +3120,8 @@ elf_x86_64_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) + && !h->forced_local + && !resolved_to_zero) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -2715,20 +3195,27 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) script. */ htab->elf.sgotplt->size += GOT_ENTRY_SIZE; - /* We also need to make an entry in the .rela.plt - section. */ - htab->elf.srelplt->size += bed->s->sizeof_rela; - htab->elf.srelplt->reloc_count++; + /* There should be no PLT relocation against resolved + undefined weak symbol in executable. */ + if (!resolved_to_zero) + { + /* We also need to make an entry in the .rela.plt + section. */ + htab->elf.srelplt->size += bed->s->sizeof_rela; + htab->elf.srelplt->reloc_count++; + } } } else { + eh->plt_got.offset = (bfd_vma) -1; h->plt.offset = (bfd_vma) -1; h->needs_plt = 0; } } else { + eh->plt_got.offset = (bfd_vma) -1; h->plt.offset = (bfd_vma) -1; h->needs_plt = 0; } @@ -2753,7 +3240,8 @@ elf_x86_64_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) + && !h->forced_local + && !resolved_to_zero) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -2777,15 +3265,17 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) } dyn = htab->elf.dynamic_sections_created; /* R_X86_64_TLSGD needs one dynamic relocation if local symbol - and two if global. - R_X86_64_GOTTPOFF needs one dynamic relocation. */ + and two if global. R_X86_64_GOTTPOFF needs one dynamic + relocation. No dynamic relocation against resolved undefined + weak symbol in executable. */ if ((GOT_TLS_GD_P (tls_type) && h->dynindx == -1) || tls_type == GOT_TLS_IE) htab->elf.srelgot->size += bed->s->sizeof_rela; else if (GOT_TLS_GD_P (tls_type)) htab->elf.srelgot->size += 2 * bed->s->sizeof_rela; else if (! GOT_TLS_GDESC_P (tls_type) - && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && !resolved_to_zero) || h->root.type != bfd_link_hash_undefweak) && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) @@ -2832,16 +3322,16 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) } /* Also discard relocs on undefined weak syms with non-default - visibility. */ + visibility or in PIE. */ if (eh->dyn_relocs != NULL) { if (h->root.type == bfd_link_hash_undefweak) { - if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + /* Undefined weak symbol is never bound locally in shared + library. */ + if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + || resolved_to_zero) 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 && ! bfd_elf_link_record_dynamic_symbol (info, h)) @@ -2873,7 +3363,10 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) dynamic. Keep dynamic relocations for run-time function pointer initialization. */ - if ((!h->non_got_ref || eh->func_pointer_refcount > 0) + if ((!h->non_got_ref + || eh->func_pointer_refcount > 0 + || (h->root.type == bfd_link_hash_undefweak + && !resolved_to_zero)) && ((h->def_dynamic && !h->def_regular) || (htab->elf.dynamic_sections_created @@ -2884,6 +3377,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) Undefined weak syms won't yet be marked as dynamic. */ if (h->dynindx == -1 && ! h->forced_local + && ! resolved_to_zero && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -2970,24 +3464,7 @@ elf_x86_64_readonly_dynrelocs (struct elf_link_hash_entry *h, return TRUE; } -/* With the local symbol, foo, we convert - mov foo@GOTPCREL(%rip), %reg - to - lea foo(%rip), %reg - and convert - call/jmp *foo@GOTPCREL(%rip) - to - nop call foo/jmp foo nop - When PIC is false, convert - test %reg, foo@GOTPCREL(%rip) - to - test $foo, %reg - and convert - binop foo@GOTPCREL(%rip), %reg - to - binop $foo, %reg - where binop is one of adc, add, and, cmp, or, sbb, sub, xor - instructions. */ +/* Convert load via the GOT slot to load immediate. */ static bfd_boolean elf_x86_64_convert_load (bfd *abfd, asection *sec, @@ -2998,10 +3475,8 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, Elf_Internal_Rela *irel, *irelend; bfd_byte *contents; struct elf_x86_64_link_hash_table *htab; - bfd_boolean changed_contents; - bfd_boolean changed_relocs; + bfd_boolean changed; bfd_signed_vma *local_got_refcounts; - bfd_vma maxpagesize; /* Don't even try to convert non-ELF outputs. */ if (!is_elf_hash_table (link_info->hash)) @@ -3022,11 +3497,9 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, if (internal_relocs == NULL) return FALSE; + changed = FALSE; htab = elf_x86_64_hash_table (link_info); - changed_contents = FALSE; - changed_relocs = FALSE; local_got_refcounts = elf_local_got_refcounts (abfd); - maxpagesize = get_elf_backend_data (abfd)->maxpagesize; /* Get the section contents. */ if (elf_section_data (sec)->this_hdr.contents != NULL) @@ -3041,301 +3514,58 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, for (irel = internal_relocs; irel < irelend; irel++) { unsigned int r_type = ELF32_R_TYPE (irel->r_info); - unsigned int r_symndx = htab->r_sym (irel->r_info); - unsigned int indx; + unsigned int r_symndx; struct elf_link_hash_entry *h; - asection *tsec; - char symtype; - bfd_vma toff, roff; - bfd_signed_vma raddend; - unsigned int opcode; - unsigned int modrm; - - if (r_type != R_X86_64_GOTPCREL - && r_type != R_X86_64_GOTPCRELX - && r_type != R_X86_64_REX_GOTPCRELX) - continue; + bfd_boolean converted; - roff = irel->r_offset; - if (roff < (r_type == R_X86_64_REX_GOTPCRELX ? 3 : 2)) + if (r_type != R_X86_64_GOTPCRELX + && r_type != R_X86_64_REX_GOTPCRELX + && r_type != R_X86_64_GOTPCREL) continue; - raddend = irel->r_addend; - /* Addend for 32-bit PC-relative relocation must be -4. */ - if (raddend != -4) - continue; - - opcode = bfd_get_8 (abfd, contents + roff - 2); - - /* It is OK to convert mov to lea. */ - if (opcode != 0x8b) - { - /* Only convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX - for mov call, jmp or one of adc, add, and, cmp, or, sbb, - sub, test, xor instructions. */ - if (r_type != R_X86_64_GOTPCRELX - && r_type != R_X86_64_REX_GOTPCRELX) - continue; - - /* It is OK to convert indirect branch to direct branch. */ - if (opcode != 0xff) - { - /* It is OK to convert adc, add, and, cmp, or, sbb, sub, - test, xor only when PIC is false. */ - if (bfd_link_pic (link_info)) - continue; - } - } - - /* Get the symbol referred to by the reloc. */ + r_symndx = htab->r_sym (irel->r_info); if (r_symndx < symtab_hdr->sh_info) - { - Elf_Internal_Sym *isym; - - isym = bfd_sym_from_r_symndx (&htab->sym_cache, - abfd, r_symndx); - - symtype = ELF_ST_TYPE (isym->st_info); - - /* STT_GNU_IFUNC must keep GOTPCREL relocations and skip - relocation against undefined symbols. */ - if (symtype == STT_GNU_IFUNC || isym->st_shndx == SHN_UNDEF) - continue; - - if (isym->st_shndx == SHN_ABS) - tsec = bfd_abs_section_ptr; - else if (isym->st_shndx == SHN_COMMON) - tsec = bfd_com_section_ptr; - else if (isym->st_shndx == SHN_X86_64_LCOMMON) - tsec = &_bfd_elf_large_com_section; - else - tsec = bfd_section_from_elf_index (abfd, isym->st_shndx); - - h = NULL; - toff = isym->st_value; - } + h = elf_x86_64_get_local_sym_hash (htab, sec->owner, + (const Elf_Internal_Rela *) irel, + FALSE); else { - indx = r_symndx - symtab_hdr->sh_info; - h = elf_sym_hashes (abfd)[indx]; - BFD_ASSERT (h != NULL); - + h = elf_sym_hashes (abfd)[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; - - /* STT_GNU_IFUNC must keep GOTPCREL relocations. We also - avoid optimizing GOTPCREL relocations againt _DYNAMIC - since ld.so may use its link-time address. */ - if ((h->def_regular - || h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && h->type != STT_GNU_IFUNC - && h != htab->elf.hdynamic - && SYMBOL_REFERENCES_LOCAL (link_info, h)) - { - /* bfd_link_hash_new or bfd_link_hash_undefined is - set by an assignment in a linker script in - bfd_elf_record_link_assignment. FIXME: If we - ever get a linker error due relocation overflow, - we will skip this optimization. */ - if (h->def_regular - && (h->root.type == bfd_link_hash_new - || h->root.type == bfd_link_hash_undefined)) - goto convert; - tsec = h->root.u.def.section; - toff = h->root.u.def.value; - symtype = h->type; - } - else - continue; } - if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE) - { - /* At this stage in linking, no SEC_MERGE symbol has been - adjusted, so all references to such symbols need to be - passed through _bfd_merged_section_offset. (Later, in - relocate_section, all SEC_MERGE symbols *except* for - section symbols have been adjusted.) - - 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 (symtype == STT_SECTION) - toff += raddend; - - toff = _bfd_merged_section_offset (abfd, &tsec, - elf_section_data (tsec)->sec_info, - toff); - - if (symtype != STT_SECTION) - toff += raddend; - } - else - toff += raddend; - - /* Don't convert if R_X86_64_PC32 relocation overflows. */ - if (tsec->output_section == sec->output_section) - { - if ((toff - roff + 0x80000000) > 0xffffffff) - continue; - } - else - { - bfd_signed_vma distance; - - /* At this point, we don't know the load addresses of TSEC - section nor SEC section. We estimate the distrance between - SEC and TSEC. We store the estimated distances in the - compressed_size field of the output section, which is only - used to decompress the compressed input section. */ - if (sec->output_section->compressed_size == 0) - { - asection *asect; - bfd_size_type size = 0; - for (asect = link_info->output_bfd->sections; - asect != NULL; - asect = asect->next) - { - asection *i; - for (i = asect->map_head.s; - i != NULL; - i = i->map_head.s) - { - size = align_power (size, i->alignment_power); - size += i->size; - } - asect->compressed_size = size; - } - } - - /* Don't convert GOTPCREL relocations if TSEC isn't placed - after SEC. */ - distance = (tsec->output_section->compressed_size - - sec->output_section->compressed_size); - if (distance < 0) - continue; + /* STT_GNU_IFUNC must keep GOTPCREL relocations. */ + if (h != NULL && h->type == STT_GNU_IFUNC) + continue; - /* Take PT_GNU_RELRO segment into account by adding - maxpagesize. */ - if ((toff + distance + maxpagesize - roff + 0x80000000) - > 0xffffffff) - continue; - } + converted = FALSE; + if (!elf_x86_64_convert_load_reloc (abfd, sec, contents, irel, h, + &converted, link_info)) + goto error_return; -convert: - if (opcode == 0xff) + if (converted) { - /* We have "call/jmp *foo@GOTPCREL(%rip)". */ - unsigned int nop; - unsigned int disp; - bfd_vma nop_offset; - - /* Convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX to - R_X86_64_PC32. */ - modrm = bfd_get_8 (abfd, contents + roff - 1); - if (modrm == 0x25) + changed = converted; + if (h) { - /* Convert to "jmp foo nop". */ - modrm = 0xe9; - nop = NOP_OPCODE; - nop_offset = irel->r_offset + 3; - disp = bfd_get_32 (abfd, contents + irel->r_offset); - irel->r_offset -= 1; - bfd_put_32 (abfd, disp, contents + irel->r_offset); - } - else - { - /* Convert to "nop call foo". ADDR_PREFIX_OPCODE - is a nop prefix. */ - modrm = 0xe8; - nop = link_info->call_nop_byte; - if (link_info->call_nop_as_suffix) - { - nop_offset = irel->r_offset + 3; - disp = bfd_get_32 (abfd, contents + irel->r_offset); - irel->r_offset -= 1; - bfd_put_32 (abfd, disp, contents + irel->r_offset); - } - else - nop_offset = irel->r_offset - 2; - } - bfd_put_8 (abfd, nop, contents + nop_offset); - bfd_put_8 (abfd, modrm, contents + irel->r_offset - 1); - r_type = R_X86_64_PC32; - } - else - { - if (opcode == 0x8b) - { - /* Convert "mov foo@GOTPCREL(%rip), %reg" to - "lea foo(%rip), %reg". */ - opcode = 0x8d; - r_type = R_X86_64_PC32; + if (h->got.refcount > 0) + h->got.refcount -= 1; } else { - modrm = bfd_get_8 (abfd, contents + roff - 1); - if (opcode == 0x85) - { - /* Convert "test %reg, foo@GOTPCREL(%rip)" to - "test $foo, %reg". */ - modrm = 0xc0 | (modrm & 0x38) >> 3; - opcode = 0xf7; - } - else - { - /* Convert "binop foo@GOTPCREL(%rip), %reg" to - "binop $foo, %reg". */ - modrm = 0xc0 | (modrm & 0x38) >> 3 | (opcode & 0x3c); - opcode = 0x81; - } - bfd_put_8 (abfd, modrm, contents + roff - 1); - - if (r_type == R_X86_64_REX_GOTPCRELX) - { - /* Move the R bit to the B bit in REX byte. */ - unsigned int rex = bfd_get_8 (abfd, contents + roff - 3); - rex = (rex & ~REX_R) | (rex & REX_R) >> 2; - bfd_put_8 (abfd, rex, contents + roff - 3); - } - /* No addend for R_X86_64_32S relocation. */ - irel->r_addend = 0; - r_type = R_X86_64_32S; - } - - bfd_put_8 (abfd, opcode, contents + roff - 2); - } - - irel->r_info = htab->r_info (r_symndx, r_type); - changed_contents = TRUE; - changed_relocs = TRUE; - - if (h) - { - if (h->got.refcount > 0) - h->got.refcount -= 1; - } - else - { - if (local_got_refcounts != NULL - && local_got_refcounts[r_symndx] > 0) - local_got_refcounts[r_symndx] -= 1; + if (local_got_refcounts != NULL + && local_got_refcounts[r_symndx] > 0) + local_got_refcounts[r_symndx] -= 1; + } } } if (contents != NULL && elf_section_data (sec)->this_hdr.contents != contents) { - if (!changed_contents && !link_info->keep_memory) + if (!changed && !link_info->keep_memory) free (contents); else { @@ -3346,7 +3576,7 @@ convert: if (elf_section_data (sec)->relocs != internal_relocs) { - if (!changed_relocs) + if (!changed) free (internal_relocs); else elf_section_data (sec)->relocs = internal_relocs; @@ -3386,19 +3616,6 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, if (dynobj == NULL) abort (); - if (htab->elf.dynamic_sections_created) - { - /* Set the contents of the .interp section to the interpreter. */ - if (bfd_link_executable (info) && !info->nointerp) - { - s = bfd_get_linker_section (dynobj, ".interp"); - if (s == NULL) - abort (); - s->size = htab->dynamic_interpreter_size; - s->contents = (unsigned char *) htab->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) @@ -3721,8 +3938,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, if ((info->flags & DF_TEXTREL) != 0) { - if ((elf_tdata (output_bfd)->has_gnu_symbols - & elf_gnu_symbol_ifunc) == elf_gnu_symbol_ifunc) + if (htab->readonly_dynrelocs_against_ifunc) { info->callbacks->einfo (_("%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n")); @@ -3883,6 +4099,10 @@ elf_x86_64_relocate_section (bfd *output_bfd, BFD_ASSERT (is_x86_64_elf (input_bfd)); + /* Skip if check_relocs failed. */ + if (input_section->check_relocs_failed) + return FALSE; + htab = elf_x86_64_hash_table (info); if (htab == NULL) return FALSE; @@ -3911,6 +4131,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, int tls_type; asection *base_got, *resolved_plt; bfd_vma st_size; + bfd_boolean resolved_to_zero; r_type = ELF32_R_TYPE (rel->r_info); if (r_type == (int) R_X86_64_GNU_VTINHERIT @@ -4039,8 +4260,84 @@ elf_x86_64_relocate_section (bfd *output_bfd, continue; abort (); } - else if (h->plt.offset == (bfd_vma) -1) - abort (); + + switch (r_type) + { + default: + break; + + case R_X86_64_GOTPCREL: + case R_X86_64_GOTPCRELX: + case R_X86_64_REX_GOTPCRELX: + 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 (h->plt.offset == (bfd_vma) -1) + abort (); + + 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); + + goto do_relocation; + } + + if (h->plt.offset == (bfd_vma) -1) + { + /* Handle static pointers of STT_GNU_IFUNC symbols. */ + if (r_type == htab->pointer_r_type + && (input_section->flags & SEC_CODE) == 0) + goto do_ifunc_pointer; + goto bad_ifunc_reloc; + } /* STT_GNU_IFUNC symbol must go through PLT. */ if (htab->elf.splt != NULL) @@ -4068,6 +4365,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, switch (r_type) { default: +bad_ifunc_reloc: if (h->root.root.string) name = h->root.root.string; else @@ -4075,9 +4373,8 @@ elf_x86_64_relocate_section (bfd *output_bfd, 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__); + "symbol `%s' isn't supported"), input_bfd, + howto->name, name); bfd_set_error (bfd_error_bad_value); return FALSE; @@ -4091,6 +4388,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, goto do_relocation; /* FALLTHROUGH */ case R_X86_64_64: +do_ifunc_pointer: if (rel->r_addend != 0) { if (h->root.root.string) @@ -4101,15 +4399,16 @@ elf_x86_64_relocate_section (bfd *output_bfd, (*_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); + input_bfd, howto->name, name, rel->r_addend); bfd_set_error (bfd_error_bad_value); return FALSE; } /* Generate dynamic relcoation only when there is a - non-GOT reference in a shared object. */ - if (bfd_link_pic (info) && h->non_got_ref) + non-GOT reference in a shared object or there is no + PLT. */ + if ((bfd_link_pic (info) && h->non_got_ref) + || h->plt.offset == (bfd_vma) -1) { Elf_Internal_Rela outrel; asection *sreloc; @@ -4143,7 +4442,16 @@ elf_x86_64_relocate_section (bfd *output_bfd, outrel.r_addend = 0; } - sreloc = htab->elf.irelifunc; + /* Dynamic relocations are stored in + 1. .rela.ifunc section in PIC object. + 2. .rela.got section in dynamic executable. + 3. .rela.iplt section in static executable. */ + if (bfd_link_pic (info)) + sreloc = htab->elf.irelifunc; + else if (htab->elf.splt != NULL) + sreloc = htab->elf.srelgot; + else + sreloc = htab->elf.irelplt; elf_append_rela (output_bfd, sreloc, &outrel); /* If this reloc is against an external symbol, we @@ -4160,69 +4468,14 @@ elf_x86_64_relocate_section (bfd *output_bfd, case R_X86_64_PLT32: case R_X86_64_PLT32_BND: goto do_relocation; - - case R_X86_64_GOTPCREL: - case R_X86_64_GOTPCRELX: - case R_X86_64_REX_GOTPCRELX: - 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); - - goto do_relocation; } } + resolved_to_zero = (eh != NULL + && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + eh->has_got_reloc, + eh)); + /* When generating a shared object, the relocations handled here are copied into the output file to be resolved at run time. */ switch (r_type) @@ -4503,13 +4756,16 @@ elf_x86_64_relocate_section (bfd *output_bfd, case R_X86_64_PC32: case R_X86_64_PC32_BND: /* Don't complain about -fPIC if the symbol is undefined when - building executable. */ - if (bfd_link_pic (info) - && (input_section->flags & SEC_ALLOC) != 0 + building executable unless it is unresolved weak symbol. */ + if ((input_section->flags & SEC_ALLOC) != 0 && (input_section->flags & SEC_READONLY) != 0 && h != NULL - && !(bfd_link_executable (info) - && h->root.type == bfd_link_hash_undefined)) + && ((bfd_link_executable (info) + && h->root.type == bfd_link_hash_undefweak + && !resolved_to_zero) + || (bfd_link_pic (info) + && !(bfd_link_pie (info) + && h->root.type == bfd_link_hash_undefined)))) { bfd_boolean fail = FALSE; bfd_boolean branch @@ -4523,7 +4779,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, defined locally or for a branch. */ fail = !h->def_regular && !branch; } - else if (!(bfd_link_executable (info) + else if (!(bfd_link_pie (info) && (h->needs_copy || eh->needs_copy))) { /* Symbol doesn't need copy reloc and isn't referenced @@ -4534,39 +4790,8 @@ elf_x86_64_relocate_section (bfd *output_bfd, } 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; - } + return elf_x86_64_need_pic (input_bfd, input_section, + h, NULL, NULL, howto); } /* Fall through. */ @@ -4585,17 +4810,19 @@ direct: /* Don't copy a pc-relative relocation into the output file if the symbol needs copy reloc or the symbol is undefined when building executable. Copy dynamic function pointer - relocations. */ + relocations. Don't generate dynamic relocations against + resolved undefined weak symbols in PIE. */ if ((bfd_link_pic (info) - && !(bfd_link_executable (info) + && !(bfd_link_pie (info) && h != NULL && (h->needs_copy || eh->needs_copy || h->root.type == bfd_link_hash_undefined) && IS_X86_64_PCREL_TYPE (r_type)) && (h == NULL - || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak) + || ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && !resolved_to_zero) + || h->root.type != bfd_link_hash_undefweak)) && ((! IS_X86_64_PCREL_TYPE (r_type) && r_type != R_X86_64_SIZE32 && r_type != R_X86_64_SIZE64) @@ -4604,10 +4831,13 @@ direct: && !bfd_link_pic (info) && h != NULL && h->dynindx != -1 - && (!h->non_got_ref || eh->func_pointer_refcount > 0) - && ((h->def_dynamic - && !h->def_regular) - || h->root.type == bfd_link_hash_undefweak + && (!h->non_got_ref + || eh->func_pointer_refcount > 0 + || (h->root.type == bfd_link_hash_undefweak + && !resolved_to_zero)) + && ((h->def_dynamic && !h->def_regular) + /* Undefined weak symbol is bound locally when + PIC is false. */ || h->root.type == bfd_link_hash_undefined))) { Elf_Internal_Rela outrel; @@ -4639,8 +4869,8 @@ direct: else if (h != NULL && h->dynindx != -1 && (IS_X86_64_PCREL_TYPE (r_type) - || ! bfd_link_pic (info) - || ! SYMBOLIC_BIND (info, h) + || !(bfd_link_executable (info) + || SYMBOLIC_BIND (info, h)) || ! h->def_regular)) { outrel.r_info = htab->r_info (h->dynindx, r_type); @@ -4648,8 +4878,12 @@ direct: } else { - /* This symbol is local, or marked to become local. */ - if (r_type == htab->pointer_r_type) + /* This symbol is local, or marked to become local. + When relocation overflow check is disabled, we + convert R_X86_64_32 to dynamic R_X86_64_RELATIVE. */ + if (r_type == htab->pointer_r_type + || (r_type == R_X86_64_32 + && info->no_reloc_overflow_check)) { relocate = TRUE; outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE); @@ -4679,16 +4913,16 @@ direct: "symbol `%s' at 0x%lx in section `%A' is " "out of range"), input_bfd, input_section, addend, - x86_64_elf_howto_table[r_type].name, - name, (unsigned long) rel->r_offset); + howto->name, name, + (unsigned long) rel->r_offset); else (*_bfd_error_handler) (_("%B: addend 0x%x in relocation %s against " "symbol `%s' at 0x%lx in section `%A' is " "out of range"), input_bfd, input_section, addend, - x86_64_elf_howto_table[r_type].name, - name, (unsigned long) rel->r_offset); + howto->name, name, + (unsigned long) rel->r_offset); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -4762,7 +4996,7 @@ direct: input_section, contents, symtab_hdr, sym_hashes, &r_type, tls_type, rel, - relend, h, r_symndx)) + relend, h, r_symndx, TRUE)) return FALSE; if (r_type == R_X86_64_TPOFF32) @@ -4774,39 +5008,53 @@ direct: if (ELF32_R_TYPE (rel->r_info) == R_X86_64_TLSGD) { /* GD->LE transition. For 64bit, change - .byte 0x66; leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr + .byte 0x66; leaq foo@tlsgd(%rip), %rdi + .word 0x6666; rex64; call __tls_get_addr@PLT + or + .byte 0x66; leaq foo@tlsgd(%rip), %rdi + .byte 0x66; rex64 + call *__tls_get_addr@GOTPCREL(%rip) + which may be converted to + addr32 call __tls_get_addr into: - movq %fs:0, %rax - leaq foo@tpoff(%rax), %rax + movq %fs:0, %rax + leaq foo@tpoff(%rax), %rax For 32bit, change - leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr + leaq foo@tlsgd(%rip), %rdi + .word 0x6666; rex64; call __tls_get_addr@PLT + or + leaq foo@tlsgd(%rip), %rdi + .byte 0x66; rex64 + call *__tls_get_addr@GOTPCREL(%rip) + which may be converted to + addr32 call __tls_get_addr into: - movl %fs:0, %eax - leaq foo@tpoff(%rax), %rax + movl %fs:0, %eax + leaq foo@tpoff(%rax), %rax For largepic, change: - leaq foo@tlsgd(%rip), %rdi - movabsq $__tls_get_addr@pltoff, %rax - addq %rbx, %rax - call *%rax + leaq foo@tlsgd(%rip), %rdi + movabsq $__tls_get_addr@pltoff, %rax + addq %r15, %rax + call *%rax into: - movq %fs:0, %rax - leaq foo@tpoff(%rax), %rax - nopw 0x0(%rax,%rax,1) */ + movq %fs:0, %rax + leaq foo@tpoff(%rax), %rax + nopw 0x0(%rax,%rax,1) */ int largepic = 0; - if (ABI_64_P (output_bfd) - && contents[roff + 5] == (bfd_byte) '\xb8') + if (ABI_64_P (output_bfd)) { - memcpy (contents + roff - 3, - "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x8d\x80" - "\0\0\0\0\x66\x0f\x1f\x44\0", 22); - largepic = 1; + if (contents[roff + 5] == 0xb8) + { + memcpy (contents + roff - 3, + "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x8d\x80" + "\0\0\0\0\x66\x0f\x1f\x44\0", 22); + largepic = 1; + } + else + memcpy (contents + roff - 4, + "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x8d\x80\0\0\0", + 16); } - else if (ABI_64_P (output_bfd)) - memcpy (contents + roff - 4, - "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x8d\x80\0\0\0", - 16); else memcpy (contents + roff - 3, "\x64\x8b\x04\x25\0\0\0\0\x48\x8d\x80\0\0\0", @@ -4814,7 +5062,8 @@ direct: bfd_put_32 (output_bfd, elf_x86_64_tpoff (info, relocation), contents + roff + 8 + largepic); - /* Skip R_X86_64_PC32/R_X86_64_PLT32/R_X86_64_PLTOFF64. */ + /* Skip R_X86_64_PC32, R_X86_64_PLT32, + R_X86_64_GOTPCRELX and R_X86_64_PLTOFF64. */ rel++; wrel++; continue; @@ -5050,39 +5299,53 @@ direct: if (ELF32_R_TYPE (rel->r_info) == R_X86_64_TLSGD) { /* GD->IE transition. For 64bit, change - .byte 0x66; leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr@plt + .byte 0x66; leaq foo@tlsgd(%rip), %rdi + .word 0x6666; rex64; call __tls_get_addr@PLT + or + .byte 0x66; leaq foo@tlsgd(%rip), %rdi + .byte 0x66; rex64 + call *__tls_get_addr@GOTPCREL(%rip + which may be converted to + addr32 call __tls_get_addr into: - movq %fs:0, %rax - addq foo@gottpoff(%rip), %rax + movq %fs:0, %rax + addq foo@gottpoff(%rip), %rax For 32bit, change - leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr@plt + leaq foo@tlsgd(%rip), %rdi + .word 0x6666; rex64; call __tls_get_addr@PLT + or + leaq foo@tlsgd(%rip), %rdi + .byte 0x66; rex64; + call *__tls_get_addr@GOTPCREL(%rip) + which may be converted to + addr32 call __tls_get_addr into: - movl %fs:0, %eax - addq foo@gottpoff(%rip), %rax + movl %fs:0, %eax + addq foo@gottpoff(%rip), %rax For largepic, change: - leaq foo@tlsgd(%rip), %rdi - movabsq $__tls_get_addr@pltoff, %rax - addq %rbx, %rax - call *%rax + leaq foo@tlsgd(%rip), %rdi + movabsq $__tls_get_addr@pltoff, %rax + addq %r15, %rax + call *%rax into: - movq %fs:0, %rax - addq foo@gottpoff(%rax), %rax - nopw 0x0(%rax,%rax,1) */ + movq %fs:0, %rax + addq foo@gottpoff(%rax), %rax + nopw 0x0(%rax,%rax,1) */ int largepic = 0; - if (ABI_64_P (output_bfd) - && contents[roff + 5] == (bfd_byte) '\xb8') + if (ABI_64_P (output_bfd)) { - memcpy (contents + roff - 3, - "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x03\x05" - "\0\0\0\0\x66\x0f\x1f\x44\0", 22); - largepic = 1; + if (contents[roff + 5] == 0xb8) + { + memcpy (contents + roff - 3, + "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x03\x05" + "\0\0\0\0\x66\x0f\x1f\x44\0", 22); + largepic = 1; + } + else + memcpy (contents + roff - 4, + "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x03\x05\0\0\0", + 16); } - else if (ABI_64_P (output_bfd)) - memcpy (contents + roff - 4, - "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x03\x05\0\0\0", - 16); else memcpy (contents + roff - 3, "\x64\x8b\x04\x25\0\0\0\0\x48\x03\x05\0\0\0", @@ -5149,40 +5412,65 @@ direct: if (! elf_x86_64_tls_transition (info, input_bfd, input_section, contents, symtab_hdr, sym_hashes, - &r_type, GOT_UNKNOWN, - rel, relend, h, r_symndx)) + &r_type, GOT_UNKNOWN, rel, + relend, h, r_symndx, TRUE)) return FALSE; if (r_type != R_X86_64_TLSLD) { /* LD->LE transition: - leaq foo@tlsld(%rip), %rdi; call __tls_get_addr. + leaq foo@tlsld(%rip), %rdi + call __tls_get_addr@PLT + For 64bit, we change it into: + .word 0x6666; .byte 0x66; movq %fs:0, %rax + For 32bit, we change it into: + nopl 0x0(%rax); movl %fs:0, %eax + Or + leaq foo@tlsld(%rip), %rdi; + call *__tls_get_addr@GOTPCREL(%rip) + which may be converted to + addr32 call __tls_get_addr For 64bit, we change it into: - .word 0x6666; .byte 0x66; movq %fs:0, %rax. + .word 0x6666; .word 0x6666; movq %fs:0, %rax For 32bit, we change it into: - nopl 0x0(%rax); movl %fs:0, %eax. + nopw 0x0(%rax); movl %fs:0, %eax For largepic, change: - leaq foo@tlsgd(%rip), %rdi - movabsq $__tls_get_addr@pltoff, %rax - addq %rbx, %rax - call *%rax - into: - data32 data32 data32 nopw %cs:0x0(%rax,%rax,1) - movq %fs:0, %eax */ + leaq foo@tlsgd(%rip), %rdi + movabsq $__tls_get_addr@pltoff, %rax + addq %rbx, %rax + call *%rax + into + data16 data16 data16 nopw %cs:0x0(%rax,%rax,1) + movq %fs:0, %eax */ BFD_ASSERT (r_type == R_X86_64_TPOFF32); - if (ABI_64_P (output_bfd) - && contents[rel->r_offset + 5] == (bfd_byte) '\xb8') - memcpy (contents + rel->r_offset - 3, - "\x66\x66\x66\x66\x2e\x0f\x1f\x84\0\0\0\0\0" - "\x64\x48\x8b\x04\x25\0\0\0", 22); - else if (ABI_64_P (output_bfd)) - memcpy (contents + rel->r_offset - 3, - "\x66\x66\x66\x64\x48\x8b\x04\x25\0\0\0", 12); + if (ABI_64_P (output_bfd)) + { + if (contents[rel->r_offset + 5] == 0xb8) + memcpy (contents + rel->r_offset - 3, + "\x66\x66\x66\x66\x2e\x0f\x1f\x84\0\0\0\0\0" + "\x64\x48\x8b\x04\x25\0\0\0", 22); + else if (contents[rel->r_offset + 4] == 0xff + || contents[rel->r_offset + 4] == 0x67) + memcpy (contents + rel->r_offset - 3, + "\x66\x66\x66\x66\x64\x48\x8b\x04\x25\0\0\0", + 13); + else + memcpy (contents + rel->r_offset - 3, + "\x66\x66\x66\x64\x48\x8b\x04\x25\0\0\0", 12); + } else - memcpy (contents + rel->r_offset - 3, - "\x0f\x1f\x40\x00\x64\x8b\x04\x25\0\0\0", 12); - /* Skip R_X86_64_PC32/R_X86_64_PLT32/R_X86_64_PLTOFF64. */ + { + if (contents[rel->r_offset + 4] == 0xff) + memcpy (contents + rel->r_offset - 3, + "\x66\x0f\x1f\x40\x00\x64\x8b\x04\x25\0\0\0", + 13); + else + memcpy (contents + rel->r_offset - 3, + "\x0f\x1f\x40\x00\x64\x8b\x04\x25\0\0\0", 12); + } + /* Skip R_X86_64_PC32, R_X86_64_PLT32, R_X86_64_GOTPCRELX + and R_X86_64_PLTOFF64. */ rel++; wrel++; continue; @@ -5285,13 +5573,9 @@ check_relocation_error: } 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; - } + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); else { (*_bfd_error_handler) @@ -5336,12 +5620,13 @@ static bfd_boolean elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, struct elf_link_hash_entry *h, - Elf_Internal_Sym *sym ATTRIBUTE_UNUSED) + Elf_Internal_Sym *sym) { struct elf_x86_64_link_hash_table *htab; const struct elf_x86_64_backend_data *abed; bfd_boolean use_plt_bnd; struct elf_x86_64_link_hash_entry *eh; + bfd_boolean local_undefweak; htab = elf_x86_64_hash_table (info); if (htab == NULL) @@ -5356,6 +5641,13 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, eh = (struct elf_x86_64_link_hash_entry *) h; + /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for + resolved undefined weak symbols in executable so that their + references have value 0 at run-time. */ + local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + eh->has_got_reloc, + eh); + if (h->plt.offset != (bfd_vma) -1) { bfd_vma plt_index; @@ -5385,6 +5677,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, /* This symbol has an entry in the procedure linkage table. Set it up. */ if ((h->dynindx == -1 + && !local_undefweak && !((h->forced_local || bfd_link_executable (info)) && h->def_regular && h->type == STT_GNU_IFUNC)) @@ -5485,60 +5778,67 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, resolved_plt->contents + plt_offset + plt_got_offset); /* Fill in the entry in the global offset table, initially this - points to the second part of the PLT entry. */ - bfd_put_64 (output_bfd, (plt->output_section->vma - + plt->output_offset - + h->plt.offset + abed->plt_lazy_offset), - gotplt->contents + got_offset); - - /* Fill in the entry in the .rela.plt section. */ - rela.r_offset = (gotplt->output_section->vma - + gotplt->output_offset - + got_offset); - if (h->dynindx == -1 - || ((bfd_link_executable (info) - || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - && h->def_regular - && h->type == STT_GNU_IFUNC)) + points to the second part of the PLT entry. Leave the entry + as zero for undefined weak symbol in PIE. No PLT relocation + against undefined weak symbol in PIE. */ + if (!local_undefweak) { - /* If an STT_GNU_IFUNC symbol is locally defined, generate - R_X86_64_IRELATIVE instead of R_X86_64_JUMP_SLOT. */ - rela.r_info = htab->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); - /* R_X86_64_IRELATIVE comes last. */ - plt_index = htab->next_irelative_index--; - } - else - { - rela.r_info = htab->r_info (h->dynindx, R_X86_64_JUMP_SLOT); - rela.r_addend = 0; - plt_index = htab->next_jump_slot_index++; - } + bfd_put_64 (output_bfd, (plt->output_section->vma + + plt->output_offset + + h->plt.offset + + abed->plt_lazy_offset), + gotplt->contents + got_offset); + + /* Fill in the entry in the .rela.plt section. */ + rela.r_offset = (gotplt->output_section->vma + + gotplt->output_offset + + got_offset); + if (h->dynindx == -1 + || ((bfd_link_executable (info) + || 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 = htab->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); + /* R_X86_64_IRELATIVE comes last. */ + plt_index = htab->next_irelative_index--; + } + else + { + rela.r_info = htab->r_info (h->dynindx, R_X86_64_JUMP_SLOT); + rela.r_addend = 0; + plt_index = htab->next_jump_slot_index++; + } - /* Don't fill PLT entry for static executables. */ - if (plt == htab->elf.splt) - { - bfd_vma plt0_offset = h->plt.offset + plt_plt_insn_end; - - /* Put relocation index. */ - bfd_put_32 (output_bfd, plt_index, - plt->contents + h->plt.offset + abed->plt_reloc_offset); - - /* Put offset for jmp .PLT0 and check for overflow. We don't - check relocation index for overflow since branch displacement - will overflow first. */ - if (plt0_offset > 0x80000000) - info->callbacks->einfo (_("%F%B: branch displacement overflow in PLT entry for `%s'\n"), - output_bfd, h->root.root.string); - bfd_put_32 (output_bfd, - plt0_offset, - plt->contents + h->plt.offset + plt_plt_offset); - } + /* Don't fill PLT entry for static executables. */ + if (plt == htab->elf.splt) + { + bfd_vma plt0_offset = h->plt.offset + plt_plt_insn_end; + + /* Put relocation index. */ + bfd_put_32 (output_bfd, plt_index, + (plt->contents + h->plt.offset + + abed->plt_reloc_offset)); + + /* Put offset for jmp .PLT0 and check for overflow. We don't + check relocation index for overflow since branch displacement + will overflow first. */ + if (plt0_offset > 0x80000000) + info->callbacks->einfo (_("%F%B: branch displacement overflow in PLT entry for `%s'\n"), + output_bfd, h->root.root.string); + bfd_put_32 (output_bfd, - plt0_offset, + plt->contents + h->plt.offset + plt_plt_offset); + } - bed = get_elf_backend_data (output_bfd); - loc = relplt->contents + plt_index * bed->s->sizeof_rela; - bed->s->swap_reloca_out (output_bfd, &rela, loc); + bed = get_elf_backend_data (output_bfd); + loc = relplt->contents + plt_index * bed->s->sizeof_rela; + bed->s->swap_reloca_out (output_bfd, &rela, loc); + } } else if (eh->plt_got.offset != (bfd_vma) -1) { @@ -5600,7 +5900,8 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, plt->contents + plt_offset + plt_got_offset); } - if (!h->def_regular + if (!local_undefweak + && !h->def_regular && (h->plt.offset != (bfd_vma) -1 || eh->plt_got.offset != (bfd_vma) -1)) { @@ -5617,11 +5918,15 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, sym->st_value = 0; } + /* Don't generate dynamic GOT relocation against undefined weak + symbol in executable. */ if (h->got.offset != (bfd_vma) -1 && ! GOT_TLS_GD_ANY_P (elf_x86_64_hash_entry (h)->tls_type) - && elf_x86_64_hash_entry (h)->tls_type != GOT_TLS_IE) + && elf_x86_64_hash_entry (h)->tls_type != GOT_TLS_IE + && !local_undefweak) { Elf_Internal_Rela rela; + asection *relgot = htab->elf.srelgot; /* This symbol has an entry in the global offset table. Set it up. */ @@ -5640,7 +5945,27 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, if (h->def_regular && h->type == STT_GNU_IFUNC) { - if (bfd_link_pic (info)) + if (h->plt.offset == (bfd_vma) -1) + { + /* STT_GNU_IFUNC is referenced without PLT. */ + if (htab->elf.splt == NULL) + { + /* use .rel[a].iplt section to store .got relocations + in static executable. */ + relgot = htab->elf.irelplt; + } + if (SYMBOL_REFERENCES_LOCAL (info, h)) + { + rela.r_info = htab->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 + goto do_glob_dat; + } + else if (bfd_link_pic (info)) { /* Generate R_X86_64_GLOB_DAT. */ goto do_glob_dat; @@ -5684,7 +6009,7 @@ do_glob_dat: rela.r_addend = 0; } - elf_append_rela (output_bfd, htab->elf.srelgot, &rela); + elf_append_rela (output_bfd, relgot, &rela); } if (h->needs_copy) @@ -5725,6 +6050,25 @@ elf_x86_64_finish_local_dynamic_symbol (void **slot, void *inf) info, h, NULL); } +/* Finish up undefined weak symbol handling in PIE. Fill its PLT entry + here since undefined weak symbol may not be dynamic and may not be + called for elf_x86_64_finish_dynamic_symbol. */ + +static bfd_boolean +elf_x86_64_pie_finish_undefweak_symbol (struct bfd_hash_entry *bh, + void *inf) +{ + struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh; + struct bfd_link_info *info = (struct bfd_link_info *) inf; + + if (h->root.type != bfd_link_hash_undefweak + || h->dynindx != -1) + return TRUE; + + return elf_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. */ @@ -5743,19 +6087,24 @@ elf_x86_64_reloc_type_class (const struct bfd_link_info *info, /* Check relocation against STT_GNU_IFUNC symbol if there are dynamic symbols. */ unsigned long r_symndx = htab->r_sym (rela->r_info); - Elf_Internal_Sym sym; - if (!bed->s->swap_symbol_in (abfd, - (htab->elf.dynsym->contents - + r_symndx * bed->s->sizeof_sym), - 0, &sym)) - abort (); + if (r_symndx != STN_UNDEF) + { + Elf_Internal_Sym sym; + if (!bed->s->swap_symbol_in (abfd, + (htab->elf.dynsym->contents + + r_symndx * bed->s->sizeof_sym), + 0, &sym)) + abort (); - if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC) - return reloc_class_ifunc; + if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC) + return reloc_class_ifunc; + } } switch ((int) ELF32_R_TYPE (rela->r_info)) { + case R_X86_64_IRELATIVE: + return reloc_class_ifunc; case R_X86_64_RELATIVE: case R_X86_64_RELATIVE64: return reloc_class_relative; @@ -5993,6 +6342,34 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd, elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE; + /* Fill PLT entries for undefined weak symbols in PIE. */ + if (bfd_link_pie (info)) + bfd_hash_traverse (&info->hash->table, + elf_x86_64_pie_finish_undefweak_symbol, + info); + + return TRUE; +} + +/* Fill PLT/GOT entries and allocate dynamic relocations for local + STT_GNU_IFUNC symbols, which aren't in the ELF linker hash table. + It has to be done before elf_link_sort_relocs is called so that + dynamic relocations are properly sorted. */ + +static bfd_boolean +elf_x86_64_output_arch_local_syms + (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info, + void *flaginfo ATTRIBUTE_UNUSED, + int (*func) (void *, const char *, + Elf_Internal_Sym *, + asection *, + struct elf_link_hash_entry *) ATTRIBUTE_UNUSED) +{ + struct elf_x86_64_link_hash_table *htab = elf_x86_64_hash_table (info); + if (htab == NULL) + return FALSE; + /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols. */ htab_traverse (htab->loc_hash_table, elf_x86_64_finish_local_dynamic_symbol, @@ -6145,7 +6522,7 @@ elf_x86_64_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, static bfd_boolean elf_x86_64_add_symbol_hook (bfd *abfd, - struct bfd_link_info *info, + struct bfd_link_info *info ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, const char **namep ATTRIBUTE_UNUSED, flagword *flagsp ATTRIBUTE_UNUSED, @@ -6174,12 +6551,6 @@ elf_x86_64_add_symbol_hook (bfd *abfd, return TRUE; } - if (ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE - && (abfd->flags & DYNAMIC) == 0 - && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols - |= elf_gnu_symbol_unique; - return TRUE; } @@ -6352,6 +6723,7 @@ static const struct bfd_elf_special_section #define elf_backend_rela_normal 1 #define elf_backend_plt_alignment 4 #define elf_backend_extern_protected_data 1 +#define elf_backend_caches_rawsize 1 #define elf_info_to_howto elf_x86_64_info_to_howto @@ -6368,8 +6740,8 @@ static const struct bfd_elf_special_section #define elf_backend_create_dynamic_sections elf_x86_64_create_dynamic_sections #define elf_backend_finish_dynamic_sections elf_x86_64_finish_dynamic_sections #define elf_backend_finish_dynamic_symbol elf_x86_64_finish_dynamic_symbol +#define elf_backend_output_arch_local_syms elf_x86_64_output_arch_local_syms #define elf_backend_gc_mark_hook elf_x86_64_gc_mark_hook -#define elf_backend_gc_sweep_hook elf_x86_64_gc_sweep_hook #define elf_backend_grok_prstatus elf_x86_64_grok_prstatus #define elf_backend_grok_psinfo elf_x86_64_grok_psinfo #ifdef CORE_HEADER @@ -6407,6 +6779,10 @@ static const struct bfd_elf_special_section elf_x86_64_additional_program_headers #define elf_backend_hash_symbol \ elf_x86_64_hash_symbol +#define elf_backend_omit_section_dynsym \ + ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true) +#define elf_backend_fixup_symbol \ + elf_x86_64_fixup_symbol #include "elf64-target.h" @@ -6456,16 +6832,33 @@ static const struct bfd_elf_special_section /* The 64-bit static TLS arena size is rounded to the nearest 16-byte boundary. */ -#undef elf_backend_static_tls_alignment +#undef elf_backend_static_tls_alignment #define elf_backend_static_tls_alignment 16 /* The Solaris 2 ABI requires a plt symbol on all platforms. Cf. Linker and Libraries Guide, Ch. 2, Link-Editor, Generating the Output File, p.63. */ -#undef elf_backend_want_plt_sym +#undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 1 +#undef elf_backend_strtab_flags +#define elf_backend_strtab_flags SHF_STRINGS + +static bfd_boolean +elf64_x86_64_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED, + Elf_Internal_Shdr *osection ATTRIBUTE_UNUSED) +{ + /* PR 19938: FIXME: Need to add code for setting the sh_info + and sh_link fields of Solaris specific section types. */ + return FALSE; +} + +#undef elf_backend_copy_special_section_fields +#define elf_backend_copy_special_section_fields elf64_x86_64_copy_solaris_special_section_fields + #include "elf64-target.h" /* Native Client support. */ @@ -6497,6 +6890,8 @@ elf64_x86_64_nacl_elf_object_p (bfd *abfd) #undef elf_backend_static_tls_alignment #undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 0 +#undef elf_backend_strtab_flags +#undef elf_backend_copy_special_section_fields /* NaCl uses substantially different PLT entries for the same effects. */ @@ -6517,11 +6912,11 @@ static const bfd_byte elf_x86_64_nacl_plt0_entry[NACL_PLT_ENTRY_SIZE] = 0x66, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw 0x0(%rax,%rax,1) */ /* 32 bytes of nop to pad out to the standard size. */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data32 prefixes */ + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data32 prefixes */ + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ - 0x66, /* excess data32 prefix */ + 0x66, /* excess data16 prefix */ 0x90 /* nop */ }; @@ -6533,7 +6928,7 @@ static const bfd_byte elf_x86_64_nacl_plt_entry[NACL_PLT_ENTRY_SIZE] = 0x41, 0xff, 0xe3, /* jmpq *%r11 */ /* 15-byte nop sequence to pad out to the next 32-byte boundary. */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data32 prefixes */ + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ /* Lazy GOT entries point here (32-byte aligned). */ @@ -6543,7 +6938,7 @@ static const bfd_byte elf_x86_64_nacl_plt_entry[NACL_PLT_ENTRY_SIZE] = 0, 0, 0, 0, /* replaced with offset to start of .plt0. */ /* 22 bytes of nop to pad out to the standard size. */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data32 prefixes */ + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ 0x0f, 0x1f, 0x80, 0, 0, 0, 0, /* nopl 0x0(%rax) */ }; diff --git a/bfd/elfcode.h b/bfd/elfcode.h index 7223dd3..79a14f3 100644 --- a/bfd/elfcode.h +++ b/bfd/elfcode.h @@ -1302,6 +1302,7 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) 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) ? */ + sym->symbol.flags |= BSF_ELF_COMMON; /* Fall through. */ case STT_OBJECT: sym->symbol.flags |= BSF_OBJECT; diff --git a/bfd/elflink.c b/bfd/elflink.c index ac03ce5..5bc5740 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -28,6 +28,10 @@ #include "safe-ctype.h" #include "libiberty.h" #include "objalloc.h" +#if BFD_SUPPORTS_PLUGINS +#include "plugin-api.h" +#include "plugin.h" +#endif /* This struct is used to pass information to routines called via elf_link_hash_traverse which must return failure. */ @@ -204,7 +208,24 @@ _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info) hash_table = elf_hash_table (info); if (hash_table->dynobj == NULL) - hash_table->dynobj = abfd; + { + /* We may not set dynobj, an input file holding linker created + dynamic sections to abfd, which may be a dynamic object with + its own dynamic sections. We need to find a normal input file + to hold linker created sections if possible. */ + if ((abfd->flags & (DYNAMIC | BFD_PLUGIN)) != 0) + { + bfd *ibfd; + for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next) + if ((ibfd->flags + & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0) + { + abfd = ibfd; + break; + } + } + hash_table->dynobj = abfd; + } if (hash_table->dynstr == NULL) { @@ -451,7 +472,7 @@ bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info, struct elf_strtab_hash *dynstr; char *p; const char *name; - bfd_size_type indx; + size_t indx; /* XXX: The ABI draft says the linker must turn hidden and internal symbols into STB_LOCAL symbols when producing the @@ -502,7 +523,7 @@ bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info, if (p != NULL) *p = ELF_VER_CHR; - if (indx == (bfd_size_type) -1) + if (indx == (size_t) -1) return FALSE; h->dynstr_index = indx; } @@ -525,8 +546,10 @@ bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info, if ((info->dynamic_data && (h->type == STT_OBJECT + || h->type == STT_COMMON || (sym != NULL - && ELF_ST_TYPE (sym->st_info) == STT_OBJECT))) + && (ELF_ST_TYPE (sym->st_info) == STT_OBJECT + || ELF_ST_TYPE (sym->st_info) == STT_COMMON)))) || (d != NULL && h->root.type == bfd_link_hash_new && (*d->match) (&d->head, NULL, h->root.root.string))) @@ -555,6 +578,19 @@ bfd_elf_record_link_assignment (bfd *output_bfd, if (h == NULL) return provide; + if (h->versioned == unknown) + { + /* Set versioned if symbol version is unknown. */ + char *version = strrchr (name, ELF_VER_CHR); + if (version) + { + if (version > name && version[-1] != ELF_VER_CHR) + h->versioned = versioned_hidden; + else + h->versioned = versioned; + } + } + switch (h->root.type) { case bfd_link_hash_defined: @@ -632,9 +668,8 @@ bfd_elf_record_link_assignment (bfd *output_bfd, if ((h->def_dynamic || h->ref_dynamic - || bfd_link_pic (info) - || (bfd_link_pde (info) - && elf_hash_table (info)->is_relocatable_executable)) + || bfd_link_dll (info) + || elf_hash_table (info)->is_relocatable_executable) && h->dynindx == -1) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) @@ -667,7 +702,7 @@ bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info, struct elf_link_local_dynamic_entry *entry; struct elf_link_hash_table *eht; struct elf_strtab_hash *dynstr; - unsigned long dynstr_index; + size_t dynstr_index; char *name; Elf_External_Sym_Shndx eshndx; char esym[sizeof (Elf64_External_Sym)]; @@ -722,7 +757,7 @@ bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info, } dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE); - if (dynstr_index == (unsigned long) -1) + if (dynstr_index == (size_t) -1) return 0; entry->isym.st_name = dynstr_index; @@ -874,11 +909,11 @@ _bfd_elf_link_renumber_dynsyms (bfd *output_bfd, elf_link_renumber_hash_table_dynsyms, &dynsymcount); - /* There is an unused NULL entry at the head of the table which - we must account for in our count. Unless there weren't any - symbols, which means we'll have no table at all. */ - if (dynsymcount != 0) - ++dynsymcount; + /* There is an unused NULL entry at the head of the table which we + must account for in our count even if the table is empty since it + is intended for the mandatory DT_SYMTAB tag (.dynsym section) in + .dynamic section. */ + dynsymcount++; elf_hash_table (info)->dynsymcount = dynsymcount; return dynsymcount; @@ -1171,21 +1206,20 @@ _bfd_elf_merge_symbol (bfd *abfd, 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. */ + /* If creating a default indirect symbol ("foo" or "foo@") from a + dynamic versioned definition ("foo@@") skip doing so if there is + an existing regular definition with a different type. We don't + want, for example, a "time" variable in the executable overriding + a "time" function in a shared library. */ if (pold_alignment == NULL && newdyn && newdef && !olddyn - && (((olddef || h->root.type == bfd_link_hash_common) - && ELF_ST_TYPE (sym->st_info) != h->type - && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE - && h->type != STT_NOTYPE - && !(newfunc && oldfunc)) - || (olddef - && ((h->type == STT_GNU_IFUNC) - != (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))))) + && (olddef || h->root.type == bfd_link_hash_common) + && ELF_ST_TYPE (sym->st_info) != h->type + && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE + && h->type != STT_NOTYPE + && !(newfunc && oldfunc)) { *skip = TRUE; return TRUE; @@ -1450,10 +1484,8 @@ _bfd_elf_merge_symbol (bfd *abfd, the old symbol override the new one as normally happens with symbols defined in dynamic objects. */ - if (! ((*info->callbacks->multiple_common) - (info, &h->root, abfd, bfd_link_hash_common, sym->st_size))) - return FALSE; - + (*info->callbacks->multiple_common) (info, &h->root, abfd, + bfd_link_hash_common, sym->st_size); if (sym->st_size > h->size) h->size = sym->st_size; @@ -1472,13 +1504,16 @@ _bfd_elf_merge_symbol (bfd *abfd, represent variables; this can cause confusion in principle, but any such confusion would seem to indicate an erroneous program or shared library. We also permit a common symbol in a regular - object to override a weak symbol in a shared object. */ + object to override a weak symbol in a shared object. A common + symbol in executable also overrides a symbol in a shared object. */ if (newdyn && newdef && (olddef || (h->root.type == bfd_link_hash_common - && (newweak || newfunc)))) + && (newweak + || newfunc + || (!olddyn && bfd_link_executable (info)))))) { *override = TRUE; newdef = FALSE; @@ -1608,9 +1643,8 @@ _bfd_elf_merge_symbol (bfd *abfd, /* It would be best if we could set the hash table entry to a common symbol, but we don't know what to use for the section or the alignment. */ - if (! ((*info->callbacks->multiple_common) - (info, &h->root, abfd, bfd_link_hash_common, sym->st_size))) - return FALSE; + (*info->callbacks->multiple_common) (info, &h->root, abfd, + bfd_link_hash_common, sym->st_size); /* If the presumed common symbol in the dynamic object is larger, pretend that the new symbol has its size. */ @@ -1750,6 +1784,31 @@ _bfd_elf_add_default_symbol (bfd *abfd, if (skip) goto nondefault; + if (hi->def_regular) + { + /* If the undecorated symbol will have a version added by a + script different to H, then don't indirect to/from the + undecorated symbol. This isn't ideal because we may not yet + have seen symbol versions, if given by a script on the + command line rather than via --version-script. */ + if (hi->verinfo.vertree == NULL && info->version_info != NULL) + { + bfd_boolean hide; + + hi->verinfo.vertree + = bfd_find_version_for_sym (info->version_info, + hi->root.root.string, &hide); + if (hi->verinfo.vertree != NULL && hide) + { + (*bed->elf_backend_hide_symbol) (info, hi, TRUE); + goto nondefault; + } + } + if (hi->verinfo.vertree != NULL + && strcmp (p + 1 + (p[1] == '@'), hi->verinfo.vertree->name) != 0) + goto nondefault; + } + if (! override) { /* Add the default symbol if not performing a relocatable link. */ @@ -2049,7 +2108,6 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) const struct elf_backend_data *bed; struct elf_info_failed eif; char *p; - bfd_size_type amt; sinfo = (struct elf_info_failed *) data; info = sinfo->info; @@ -2139,8 +2197,8 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) if (h->dynindx == -1) return TRUE; - amt = sizeof *t; - t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd, amt); + t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd, + sizeof *t); if (t == NULL) { sinfo->failed = TRUE; @@ -3058,9 +3116,9 @@ static bfd_boolean elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef) { Elf_Internal_Shdr * hdr; - bfd_size_type symcount; - bfd_size_type extsymcount; - bfd_size_type extsymoff; + size_t symcount; + size_t extsymcount; + size_t extsymoff; Elf_Internal_Sym *isymbuf; Elf_Internal_Sym *isym; Elf_Internal_Sym *isymend; @@ -3070,15 +3128,25 @@ elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef) if (abfd == NULL) return FALSE; - /* Return FALSE if the object has been claimed by plugin. */ - if (abfd->plugin_format == bfd_plugin_yes) - return FALSE; - if (! bfd_check_format (abfd, bfd_object)) return FALSE; - /* Select the appropriate symbol table. */ - if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0) + /* Select the appropriate symbol table. If we don't know if the + object file is an IR object, give linker LTO plugin a chance to + get the correct symbol table. */ + if (abfd->plugin_format == bfd_plugin_yes +#if BFD_SUPPORTS_PLUGINS + || (abfd->plugin_format == bfd_plugin_unknown + && bfd_link_plugin_object_p (abfd)) +#endif + ) + { + /* Use the IR symbol table if the object has been claimed by + plugin. */ + abfd = abfd->plugin_dummy_bfd; + hdr = &elf_tdata (abfd)->symtab_hdr; + } + else if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0) hdr = &elf_tdata (abfd)->symtab_hdr; else hdr = &elf_tdata (abfd)->dynsymtab_hdr; @@ -3178,14 +3246,14 @@ elf_add_dt_needed_tag (bfd *abfd, bfd_boolean do_it) { struct elf_link_hash_table *hash_table; - bfd_size_type strindex; + size_t strindex; if (!_bfd_elf_link_create_dynstrtab (abfd, info)) return -1; hash_table = elf_hash_table (info); strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE); - if (strindex == (bfd_size_type) -1) + if (strindex == (size_t) -1) return -1; if (_bfd_elf_strtab_refcount (hash_table->dynstr, strindex) != 1) @@ -3228,12 +3296,26 @@ elf_add_dt_needed_tag (bfd *abfd, return 0; } +/* Return true if SONAME is on the needed list between NEEDED and STOP + (or the end of list if STOP is NULL), and needed by a library that + will be loaded. */ + static bfd_boolean -on_needed_list (const char *soname, struct bfd_link_needed_list *needed) -{ - for (; needed != NULL; needed = needed->next) - if ((elf_dyn_lib_class (needed->by) & DYN_AS_NEEDED) == 0 - && strcmp (soname, needed->name) == 0) +on_needed_list (const char *soname, + struct bfd_link_needed_list *needed, + struct bfd_link_needed_list *stop) +{ + struct bfd_link_needed_list *look; + for (look = needed; look != stop; look = look->next) + if (strcmp (soname, look->name) == 0 + && ((elf_dyn_lib_class (look->by) & DYN_AS_NEEDED) == 0 + /* If needed by a library that itself is not directly + needed, recursively check whether that library is + indirectly needed. Since we add DT_NEEDED entries to + the end of the list, library dependencies appear after + the library. Therefore search prior to the current + LOOK, preventing possible infinite recursion. */ + || on_needed_list (elf_dt_name (look->by), needed, look))) return TRUE; return FALSE; @@ -3339,7 +3421,7 @@ elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info) { asection *s; bfd_byte *p; - bfd_size_type i; + size_t i; Elf_Internal_Verdef def; Elf_Internal_Verdaux defaux; @@ -3371,7 +3453,7 @@ elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info) { asection *s; bfd_byte *p; - bfd_size_type i; + size_t i; Elf_Internal_Verneed need; Elf_Internal_Vernaux needaux; @@ -3449,6 +3531,71 @@ _bfd_elf_notice_as_needed (bfd *ibfd, return (*info->callbacks->notice) (info, NULL, NULL, ibfd, NULL, act, 0); } +/* Check relocations an ELF object file. */ + +bfd_boolean +_bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info) +{ + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + struct elf_link_hash_table *htab = elf_hash_table (info); + + /* 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 + relocs. + + This is required to build global offset table entries and to + arrange for dynamic relocs. It is not required for the + particular common case of linking non PIC code, even when linking + against shared libraries, but unfortunately there is no way of + knowing whether an object file has been compiled PIC or not. + Looking through the relocs is not particularly time consuming. + The problem is that we must either (1) keep the relocs in memory, + which causes the linker to require additional runtime memory or + (2) read the relocs twice from the input file, which wastes time. + This would be a good case for using mmap. + + I have no idea how to handle linking PIC code into a file of a + different format. It probably can't be done. */ + if ((abfd->flags & DYNAMIC) == 0 + && is_elf_hash_table (htab) + && bed->check_relocs != NULL + && elf_object_id (abfd) == elf_hash_table_id (htab) + && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec)) + { + asection *o; + + for (o = abfd->sections; o != NULL; o = o->next) + { + Elf_Internal_Rela *internal_relocs; + bfd_boolean ok; + + /* Don't check relocations in excluded sections. */ + if ((o->flags & SEC_RELOC) == 0 + || (o->flags & SEC_EXCLUDE) != 0 + || o->reloc_count == 0 + || ((info->strip == strip_all || info->strip == strip_debugger) + && (o->flags & SEC_DEBUGGING) != 0) + || bfd_is_abs_section (o->output_section)) + continue; + + internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, + info->keep_memory); + if (internal_relocs == NULL) + return FALSE; + + ok = (*bed->check_relocs) (abfd, info, o, internal_relocs); + + if (elf_section_data (o)->relocs != internal_relocs) + free (internal_relocs); + + if (! ok) + return FALSE; + } + } + + return TRUE; +} + /* Add symbols from an ELF object file to the linker hash table. */ static bfd_boolean @@ -3456,16 +3603,16 @@ 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; - bfd_size_type extsymoff; + size_t symcount; + size_t extsymcount; + size_t extsymoff; struct elf_link_hash_entry **sym_hash; bfd_boolean dynamic; Elf_External_Versym *extversym = NULL; Elf_External_Versym *ever; struct elf_link_hash_entry *weaks; struct elf_link_hash_entry **nondeflt_vers = NULL; - bfd_size_type nondeflt_vers_cnt = 0; + size_t nondeflt_vers_cnt = 0; Elf_Internal_Sym *isymbuf = NULL; Elf_Internal_Sym *isym; Elf_Internal_Sym *isymend; @@ -3481,8 +3628,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) void *old_ent; struct bfd_link_hash_entry *old_undefs = NULL; struct bfd_link_hash_entry *old_undefs_tail = NULL; - long old_dynsymcount = 0; - bfd_size_type old_dynstr_size = 0; + void *old_strtab = NULL; size_t tabsize = 0; asection *s; bfd_boolean just_syms; @@ -3598,11 +3744,14 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) /* If we are creating a shared library, create all the dynamic sections immediately. We need to attach them to something, so we attach them to this BFD, provided it is the right - format and is not from ld --just-symbols. FIXME: If there + format and is not from ld --just-symbols. Always create the + dynamic sections for -E/--dynamic-list. FIXME: If there are no input BFD's of the same format as the output, we can't make a shared library. */ if (!just_syms - && bfd_link_pic (info) + && (bfd_link_pic (info) + || (!bfd_link_relocatable (info) + && (info->export_dynamic || info->dynamic))) && is_elf_hash_table (htab) && info->output_bfd->xvec == abfd->xvec && !htab->dynamic_sections_created) @@ -3844,7 +3993,8 @@ error_free_dyn: { /* We store a pointer to the hash table entry for each external symbol. */ - amt = extsymcount * sizeof (struct elf_link_hash_entry *); + amt = extsymcount; + amt *= sizeof (struct elf_link_hash_entry *); sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt); if (sym_hash == NULL) goto error_free_sym; @@ -3923,8 +4073,9 @@ error_free_dyn: old_table = htab->root.table.table; old_size = htab->root.table.size; old_count = htab->root.table.count; - old_dynsymcount = htab->dynsymcount; - old_dynstr_size = _bfd_elf_strtab_size (htab->dynstr); + old_strtab = _bfd_elf_strtab_save (htab->dynstr); + if (old_strtab == NULL) + goto error_free_vers; for (i = 0; i < htab->root.table.size; i++) { @@ -3966,6 +4117,7 @@ error_free_dyn: bfd_boolean old_weak; bfd_boolean override; bfd_boolean common; + bfd_boolean discarded; unsigned int old_alignment; bfd *old_bfd; bfd_boolean matched; @@ -3976,6 +4128,7 @@ error_free_dyn: sec = NULL; value = isym->st_value; common = bed->common_definition (isym); + discarded = FALSE; bind = ELF_ST_BIND (isym->st_info); switch (bind) @@ -4026,6 +4179,7 @@ error_free_dyn: /* Symbols from discarded section are undefined. We keep its visibility. */ sec = bfd_und_section_ptr; + discarded = TRUE; isym->st_shndx = SHN_UNDEF; } else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) @@ -4261,6 +4415,11 @@ error_free_dyn: (struct bfd_link_hash_entry **) sym_hash))) goto error_free_vers; + if ((flags & BSF_GNU_UNIQUE) + && (abfd->flags & DYNAMIC) == 0 + && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_unique; + h = *sym_hash; /* We need to make sure that indirect symbol dynamic flags are updated. */ @@ -4269,6 +4428,11 @@ error_free_dyn: || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; + /* Setting the index to -3 tells elf_link_output_extsym that + this symbol is defined in a discarded section. */ + if (discarded) + h->indx = -3; + *sym_hash = h; new_weak = (flags & BSF_WEAK) != 0; @@ -4406,7 +4570,8 @@ error_free_dyn: symbol_align = ffs (h->root.u.def.value) - 1; if (h->root.u.def.section->owner != NULL - && (h->root.u.def.section->owner->flags & DYNAMIC) == 0) + && (h->root.u.def.section->owner->flags + & (DYNAMIC | BFD_PLUGIN)) == 0) { normal_align = h->root.u.def.section->alignment_power; if (normal_align > symbol_align) @@ -4549,7 +4714,7 @@ error_free_dyn: goto error_free_vers; } } - else if (dynsym && h->dynindx != -1) + else if (h->dynindx != -1) /* If the symbol already has a dynamic index, but visibility says it should not be visible, turn it into a local symbol. */ @@ -4573,7 +4738,8 @@ error_free_dyn: || (old_bfd->flags & BFD_PLUGIN) == 0)) || (h->ref_dynamic_nonweak && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0 - && !on_needed_list (elf_dt_name (abfd), htab->needed)))) + && !on_needed_list (elf_dt_name (abfd), + htab->needed, NULL)))) { int ret; const char *soname = elf_dt_name (abfd); @@ -4635,7 +4801,9 @@ error_free_dyn: memcpy (htab->root.table.table, old_tab, tabsize); htab->root.undefs = old_undefs; htab->root.undefs_tail = old_undefs_tail; - _bfd_elf_strtab_restore_size (htab->dynstr, old_dynstr_size); + _bfd_elf_strtab_restore (htab->dynstr, old_strtab); + free (old_strtab); + old_strtab = NULL; for (i = 0; i < htab->root.table.size; i++) { struct bfd_hash_entry *p; @@ -4648,9 +4816,6 @@ error_free_dyn: h = (struct elf_link_hash_entry *) p; if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; - if (h->dynindx >= old_dynsymcount - && h->dynstr_index < old_dynstr_size) - _bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index); /* Preserve the maximum alignment and size for common symbols even if this dynamic lib isn't on DT_NEEDED @@ -4711,7 +4876,7 @@ error_free_dyn: such that any relocs against foo become foo@BAR. */ if (!bfd_link_relocatable (info) && nondeflt_vers != NULL) { - bfd_size_type cnt, symidx; + size_t cnt, symidx; for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt) { @@ -4782,7 +4947,8 @@ error_free_dyn: /* Since we have to search the whole symbol list for each weak 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 *); + amt = extsymcount; + amt *= sizeof (struct elf_link_hash_entry *); sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt); if (sorted_sym_hash == NULL) goto error_return; @@ -4915,57 +5081,9 @@ error_free_dyn: && !(*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 - relocs. - - This is required to build global offset table entries and to - arrange for dynamic relocs. It is not required for the - particular common case of linking non PIC code, even when linking - against shared libraries, but unfortunately there is no way of - knowing whether an object file has been compiled PIC or not. - Looking through the relocs is not particularly time consuming. - The problem is that we must either (1) keep the relocs in memory, - which causes the linker to require additional runtime memory or - (2) read the relocs twice from the input file, which wastes time. - This would be a good case for using mmap. - - I have no idea how to handle linking PIC code into a file of a - different format. It probably can't be done. */ - if (! dynamic - && is_elf_hash_table (htab) - && bed->check_relocs != NULL - && elf_object_id (abfd) == elf_hash_table_id (htab) - && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec)) - { - asection *o; - - for (o = abfd->sections; o != NULL; o = o->next) - { - Elf_Internal_Rela *internal_relocs; - bfd_boolean ok; - - if ((o->flags & SEC_RELOC) == 0 - || o->reloc_count == 0 - || ((info->strip == strip_all || info->strip == strip_debugger) - && (o->flags & SEC_DEBUGGING) != 0) - || bfd_is_abs_section (o->output_section)) - continue; - - internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, - info->keep_memory); - if (internal_relocs == NULL) - goto error_return; - - ok = (*bed->check_relocs) (abfd, info, o, internal_relocs); - - if (elf_section_data (o)->relocs != internal_relocs) - free (internal_relocs); - - if (! ok) - goto error_return; - } - } + if (!info->check_relocs_after_open_input + && !_bfd_elf_link_check_relocs (abfd, info)) + return FALSE; /* If this is a non-traditional link, try to optimize the handling of the .stab/.stabstr sections. */ @@ -5020,6 +5138,8 @@ error_free_dyn: error_free_vers: if (old_tab != NULL) free (old_tab); + if (old_strtab != NULL) + free (old_strtab); if (nondeflt_vers != NULL) free (nondeflt_vers); if (extversym != NULL) @@ -5201,7 +5321,7 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) if (!(*info->callbacks ->add_archive_element) (info, element, symdef->name, &element)) - goto error_return; + continue; if (!bfd_link_add_symbols (element, info)) goto error_return; @@ -5690,14 +5810,14 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info, asection **sinterpptr) { - bfd_size_type soname_indx; + size_t soname_indx; bfd *dynobj; const struct elf_backend_data *bed; struct elf_info_failed asvinfo; *sinterpptr = NULL; - soname_indx = (bfd_size_type) -1; + soname_indx = (size_t) -1; if (!is_elf_hash_table (info->hash)) return TRUE; @@ -5778,7 +5898,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, { soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, soname, TRUE); - if (soname_indx == (bfd_size_type) -1 + if (soname_indx == (size_t) -1 || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx)) return FALSE; } @@ -5792,12 +5912,12 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, if (rpath != NULL) { - bfd_size_type indx; + size_t indx; bfd_vma tag; indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath, TRUE); - if (indx == (bfd_size_type) -1) + if (indx == (size_t) -1) return FALSE; tag = info->new_dtags ? DT_RUNPATH : DT_RPATH; @@ -5807,11 +5927,11 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, if (filter_shlib != NULL) { - bfd_size_type indx; + size_t indx; indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, filter_shlib, TRUE); - if (indx == (bfd_size_type) -1 + if (indx == (size_t) -1 || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx)) return FALSE; } @@ -5822,11 +5942,11 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, for (p = auxiliary_filters; *p != NULL; p++) { - bfd_size_type indx; + size_t indx; indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, *p, TRUE); - if (indx == (bfd_size_type) -1 + if (indx == (size_t) -1 || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx)) return FALSE; } @@ -5834,22 +5954,22 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, if (audit != NULL) { - bfd_size_type indx; + size_t indx; indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit, TRUE); - if (indx == (bfd_size_type) -1 + if (indx == (size_t) -1 || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx)) return FALSE; } if (depaudit != NULL) { - bfd_size_type indx; + size_t indx; indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit, TRUE); - if (indx == (bfd_size_type) -1 + if (indx == (size_t) -1 || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx)) return FALSE; } @@ -6157,7 +6277,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, + sizeof (Elf_External_Verdaux)); } - if (soname_indx != (bfd_size_type) -1) + if (soname_indx != (size_t) -1) { _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, soname_indx); @@ -6167,13 +6287,13 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, } else { - bfd_size_type indx; + size_t indx; name = lbasename (output_bfd->filename); def.vd_hash = bfd_elf_hash (name); indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, name, FALSE); - if (indx == (bfd_size_type) -1) + if (indx == (size_t) -1) return FALSE; defaux.vda_name = indx; } @@ -6392,7 +6512,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, { unsigned int caux; Elf_Internal_Vernaux *a; - bfd_size_type indx; + size_t indx; caux = 0; for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) @@ -6405,7 +6525,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, ? elf_dt_name (t->vn_bfd) : lbasename (t->vn_bfd->filename), FALSE); - if (indx == (bfd_size_type) -1) + if (indx == (size_t) -1) return FALSE; t->vn_file = indx; t->vn_aux = sizeof (Elf_External_Verneed); @@ -6424,7 +6544,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, a->vna_hash = bfd_elf_hash (a->vna_nodename); indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, a->vna_nodename, FALSE); - if (indx == (bfd_size_type) -1) + if (indx == (size_t) -1) return FALSE; a->vna_name = indx; if (a->vna_nextptr == NULL) @@ -6537,8 +6657,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) /* Work out the size of the symbol version section. */ s = bfd_get_linker_section (dynobj, ".gnu.version"); BFD_ASSERT (s != NULL); - if (dynsymcount != 0 - && (s->flags & SEC_EXCLUDE) == 0) + if ((s->flags & SEC_EXCLUDE) == 0) { s->size = dynsymcount * sizeof (Elf_External_Versym); s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); @@ -6559,17 +6678,14 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) BFD_ASSERT (s != NULL); s->size = dynsymcount * bed->s->sizeof_sym; - if (dynsymcount != 0) - { - s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); - if (s->contents == NULL) - return FALSE; + s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); + if (s->contents == NULL) + return FALSE; - /* The first entry in .dynsym is a dummy symbol. - Clear all the section syms, in case we don't output them all. */ - ++section_sym_count; - memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym); - } + /* The first entry in .dynsym is a dummy symbol. Clear all the + section syms, in case we don't output them all. */ + ++section_sym_count; + memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym); elf_hash_table (info)->bucketcount = 0; @@ -7207,7 +7323,7 @@ struct elf_symbuf_symbol struct elf_symbuf_head { struct elf_symbuf_symbol *ssym; - bfd_size_type count; + size_t count; unsigned int st_shndx; }; @@ -7241,12 +7357,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_create_symbuf (size_t symcount, Elf_Internal_Sym *isymbuf) { Elf_Internal_Sym **ind, **indbufend, **indbuf; struct elf_symbuf_symbol *ssym; struct elf_symbuf_head *ssymbuf, *ssymhead; - bfd_size_type i, shndx_count, total_size; + size_t i, shndx_count, total_size; indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf)); if (indbuf == NULL) @@ -7293,7 +7409,7 @@ 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 ((size_t) (ssymhead - ssymbuf) == shndx_count && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf) == total_size)); @@ -7311,12 +7427,12 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, bfd *bfd1, *bfd2; const struct elf_backend_data *bed1, *bed2; Elf_Internal_Shdr *hdr1, *hdr2; - bfd_size_type symcount1, symcount2; + size_t symcount1, symcount2; Elf_Internal_Sym *isymbuf1, *isymbuf2; struct elf_symbuf_head *ssymbuf1, *ssymbuf2; Elf_Internal_Sym *isym, *isymend; struct elf_symbol *symtable1 = NULL, *symtable2 = NULL; - bfd_size_type count1, count2, i; + size_t count1, count2, i; unsigned int shndx1, shndx2; bfd_boolean result; @@ -7379,7 +7495,7 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, if (ssymbuf1 != NULL && ssymbuf2 != NULL) { /* Optimized faster version. */ - bfd_size_type lo, hi, mid; + size_t lo, hi, mid; struct elf_symbol *symp; struct elf_symbuf_symbol *ssym, *ssymend; @@ -7731,10 +7847,15 @@ resolve_symbol (const char *name, return FALSE; } +/* Looks up NAME in SECTIONS. If found sets RESULT to NAME's address (in + bytes) and returns TRUE, otherwise returns FALSE. Accepts pseudo-section + names like "foo.end" which is the end address of section "foo". */ + static bfd_boolean resolve_section (const char *name, asection *sections, - bfd_vma *result) + bfd_vma *result, + bfd * abfd) { asection *curr; unsigned int len; @@ -7747,6 +7868,7 @@ resolve_section (const char *name, } /* Hmm. still haven't found it. try pseudo-section names. */ + /* FIXME: This could be coded more efficiently... */ for (curr = sections; curr; curr = curr->next) { len = strlen (curr->name); @@ -7757,7 +7879,7 @@ resolve_section (const char *name, { if (strncmp (".end", name + len, 4) == 0) { - *result = curr->vma + curr->size; + *result = curr->vma + curr->size / bfd_octets_per_byte (abfd); return TRUE; } @@ -7839,7 +7961,7 @@ eval_symbol (bfd_vma *result, if (symbol_is_section) { - if (!resolve_section (symbuf, flinfo->output_bfd->sections, result) + if (!resolve_section (symbuf, flinfo->output_bfd->sections, result, input_bfd) && !resolve_symbol (symbuf, input_bfd, flinfo, result, isymbuf, locsymcount)) { @@ -7852,7 +7974,7 @@ eval_symbol (bfd_vma *result, if (!resolve_symbol (symbuf, input_bfd, flinfo, result, isymbuf, locsymcount) && !resolve_section (symbuf, flinfo->output_bfd->sections, - result)) + result, input_bfd)) { undefined_reference ("symbol", symbuf); return FALSE; @@ -8076,8 +8198,8 @@ bfd_elf_perform_complex_relocation (bfd *input_bfd, else shift = (8 * wordsz) - (start + len); - /* FIXME: octets_per_byte. */ - x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset); + x = get_value (wordsz, chunksz, input_bfd, + contents + rel->r_offset * bfd_octets_per_byte (input_bfd)); #ifdef DEBUG printf ("Doing complex reloc: " @@ -8109,8 +8231,8 @@ bfd_elf_perform_complex_relocation (bfd *input_bfd, (unsigned long) relocation, (unsigned long) (mask << shift), (unsigned long) ((relocation & mask) << shift), (unsigned long) x); #endif - /* FIXME: octets_per_byte. */ - put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset); + put_value (wordsz, chunksz, input_bfd, x, + contents + rel->r_offset * bfd_octets_per_byte (input_bfd)); return r; } @@ -8447,6 +8569,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) struct elf_link_sort_rela *sq; const struct elf_backend_data *bed = get_elf_backend_data (abfd); int i2e = bed->s->int_rels_per_ext_rel; + unsigned int opb = bfd_octets_per_byte (abfd); void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *); void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); struct bfd_link_order *lo; @@ -8462,7 +8585,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) bfd_boolean use_rela_initialised = FALSE; /* This is just here to stop gcc from complaining. - It's initialization checking code is not perfect. */ + Its initialization checking code is not perfect. */ use_rela = TRUE; /* Both sections are present. Examine the sizes @@ -8483,8 +8606,9 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) /* Section size is only divisible by rela. */ if (use_rela_initialised && (use_rela == FALSE)) { - _bfd_error_handler - (_("%B: Unable to sort relocs - they are in more than one size"), abfd); + _bfd_error_handler (_("%B: Unable to sort relocs - " + "they are in more than one size"), + abfd); bfd_set_error (bfd_error_invalid_operation); return 0; } @@ -8500,8 +8624,9 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) /* Section size is only divisible by rel. */ if (use_rela_initialised && (use_rela == TRUE)) { - _bfd_error_handler - (_("%B: Unable to sort relocs - they are in more than one size"), abfd); + _bfd_error_handler (_("%B: Unable to sort relocs - " + "they are in more than one size"), + abfd); bfd_set_error (bfd_error_invalid_operation); return 0; } @@ -8513,9 +8638,10 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) } else { - /* The section size is not divisible by either - something is wrong. */ - _bfd_error_handler - (_("%B: Unable to sort relocs - they are of an unknown size"), abfd); + /* The section size is not divisible by either - + something is wrong. */ + _bfd_error_handler (_("%B: Unable to sort relocs - " + "they are of an unknown size"), abfd); bfd_set_error (bfd_error_invalid_operation); return 0; } @@ -8537,8 +8663,9 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) /* Section size is only divisible by rela. */ if (use_rela_initialised && (use_rela == FALSE)) { - _bfd_error_handler - (_("%B: Unable to sort relocs - they are in more than one size"), abfd); + _bfd_error_handler (_("%B: Unable to sort relocs - " + "they are in more than one size"), + abfd); bfd_set_error (bfd_error_invalid_operation); return 0; } @@ -8554,8 +8681,9 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) /* Section size is only divisible by rel. */ if (use_rela_initialised && (use_rela == TRUE)) { - _bfd_error_handler - (_("%B: Unable to sort relocs - they are in more than one size"), abfd); + _bfd_error_handler (_("%B: Unable to sort relocs - " + "they are in more than one size"), + abfd); bfd_set_error (bfd_error_invalid_operation); return 0; } @@ -8567,9 +8695,10 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) } else { - /* The section size is not divisible by either - something is wrong. */ - _bfd_error_handler - (_("%B: Unable to sort relocs - they are of an unknown size"), abfd); + /* The section size is not divisible by either - + something is wrong. */ + _bfd_error_handler (_("%B: Unable to sort relocs - " + "they are of an unknown size"), abfd); bfd_set_error (bfd_error_invalid_operation); return 0; } @@ -8645,8 +8774,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; + p = sort + o->output_offset * opb / ext_size * sort_elt; while (erel < erelend) { @@ -8682,6 +8810,35 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2); + struct elf_link_hash_table *htab = elf_hash_table (info); + if (htab->srelplt && htab->srelplt->output_section == dynamic_relocs) + { + /* We have plt relocs in .rela.dyn. */ + sq = (struct elf_link_sort_rela *) sort; + for (i = 0; i < count; i++) + if (sq[count - i - 1].type != reloc_class_plt) + break; + if (i != 0 && htab->srelplt->size == i * ext_size) + { + struct bfd_link_order **plo; + /* Put srelplt link_order last. This is so the output_offset + set in the next loop is correct for DT_JMPREL. */ + for (plo = &dynamic_relocs->map_head.link_order; *plo != NULL; ) + if ((*plo)->type == bfd_indirect_link_order + && (*plo)->u.indirect.section == htab->srelplt) + { + lo = *plo; + *plo = lo->next; + } + else + plo = &(*plo)->next; + *plo = lo; + lo->next = NULL; + dynamic_relocs->map_tail.link_order = lo; + } + } + + p = sort; for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next) if (lo->type == bfd_indirect_link_order) { @@ -8690,8 +8847,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; + o->output_offset = (p - sort) / sort_elt * ext_size / opb; while (erel < erelend) { struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p; @@ -8780,7 +8936,8 @@ static bfd_boolean elf_link_swap_symbols_out (struct elf_final_link_info *flinfo) { struct elf_link_hash_table *hash_table = elf_hash_table (flinfo->info); - bfd_size_type amt, i; + bfd_size_type amt; + size_t i; const struct elf_backend_data *bed; bfd_byte *symbuf; Elf_Internal_Shdr *hdr; @@ -8801,8 +8958,8 @@ elf_link_swap_symbols_out (struct elf_final_link_info *flinfo) if (flinfo->symshndxbuf) { - amt = (sizeof (Elf_External_Sym_Shndx) - * (bfd_get_symcount (flinfo->output_bfd))); + amt = sizeof (Elf_External_Sym_Shndx); + amt *= bfd_get_symcount (flinfo->output_bfd); flinfo->symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt); if (flinfo->symshndxbuf == NULL) { @@ -8897,7 +9054,8 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info, case bfd_link_hash_undefined: case bfd_link_hash_undefweak: abfd = h->root.u.undef.abfd; - if ((abfd->flags & DYNAMIC) == 0 + if (abfd == NULL + || (abfd->flags & DYNAMIC) == 0 || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0) return FALSE; break; @@ -8919,9 +9077,9 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info, { bfd *input; Elf_Internal_Shdr *hdr; - bfd_size_type symcount; - bfd_size_type extsymcount; - bfd_size_type extsymoff; + size_t symcount; + size_t extsymcount; + size_t extsymoff; Elf_Internal_Shdr *versymhdr; Elf_Internal_Sym *isym; Elf_Internal_Sym *isymend; @@ -9023,6 +9181,28 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info, return FALSE; } +/* Convert ELF common symbol TYPE. */ + +static int +elf_link_convert_common_type (struct bfd_link_info *info, int type) +{ + /* Commom symbol can only appear in relocatable link. */ + if (!bfd_link_relocatable (info)) + abort (); + switch (info->elf_stt_common) + { + case unchanged: + break; + case elf_stt_common: + type = STT_COMMON; + break; + case no_elf_stt_common: + type = STT_OBJECT; + break; + } + return type; +} + /* Add an external symbol to the symbol table. This is called from the hash table traversal routine. When generating a shared object, we go through the symbol table twice. The first time we output @@ -9042,6 +9222,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) const struct elf_backend_data *bed; long indx; int ret; + unsigned int type; /* A symbol is bound locally if it is forced local or it is locally defined, hidden versioned, not referenced by shared library and not exported when linking executable. */ @@ -9094,19 +9275,15 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) && (!h->ref_regular || flinfo->info->gc_sections) && !elf_link_check_versioned_symbol (flinfo->info, bed, h) && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE) - { - if (!(flinfo->info->callbacks->undefined_symbol - (flinfo->info, h->root.root.string, - h->ref_regular ? NULL : h->root.u.undef.abfd, - NULL, 0, - (flinfo->info->unresolved_syms_in_shared_libs - == RM_GENERATE_ERROR)))) - { - bfd_set_error (bfd_error_bad_value); - eoinfo->failed = TRUE; - return FALSE; - } - } + (*flinfo->info->callbacks->undefined_symbol) + (flinfo->info, h->root.root.string, + h->ref_regular ? NULL : h->root.u.undef.abfd, + NULL, 0, + flinfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR); + + /* Strip a global symbol defined in a discarded section. */ + if (h->indx == -3) + return TRUE; } /* We should also warn if a forced local symbol is referenced from @@ -9176,35 +9353,21 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0) strip = TRUE; + type = h->type; + /* If we're stripping it, and it's not a dynamic symbol, there's nothing else to do. However, if it is a forced local symbol or an ifunc symbol we need to give the backend finish_dynamic_symbol function a chance to make it dynamic. */ if (strip && h->dynindx == -1 - && h->type != STT_GNU_IFUNC + && type != STT_GNU_IFUNC && !h->forced_local) return TRUE; sym.st_value = 0; sym.st_size = h->size; sym.st_other = h->other; - if (local_bind) - { - sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type); - /* Turn off visibility on local symbol. */ - sym.st_other &= ~ELF_ST_VISIBILITY (-1); - } - /* Set STB_GNU_UNIQUE only if symbol is defined in regular object. */ - else if (h->unique_global && h->def_regular) - 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); - else - sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type); - sym.st_target_internal = h->target_internal; - switch (h->root.type) { default: @@ -9279,6 +9442,42 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) return TRUE; } + if (type == STT_COMMON || type == STT_OBJECT) + switch (h->root.type) + { + case bfd_link_hash_common: + type = elf_link_convert_common_type (flinfo->info, type); + break; + case bfd_link_hash_defined: + case bfd_link_hash_defweak: + if (bed->common_definition (&sym)) + type = elf_link_convert_common_type (flinfo->info, type); + else + type = STT_OBJECT; + break; + case bfd_link_hash_undefined: + case bfd_link_hash_undefweak: + break; + default: + abort (); + } + + if (local_bind) + { + sym.st_info = ELF_ST_INFO (STB_LOCAL, type); + /* Turn off visibility on local symbol. */ + sym.st_other &= ~ELF_ST_VISIBILITY (-1); + } + /* Set STB_GNU_UNIQUE only if symbol is defined in regular object. */ + else if (h->unique_global && h->def_regular) + sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, 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, type); + else + sym.st_info = ELF_ST_INFO (STB_GLOBAL, type); + sym.st_target_internal = h->target_internal; + /* 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 @@ -9315,7 +9514,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) || ELF_ST_BIND (sym.st_info) == STB_WEAK)) { int bindtype; - unsigned int type = ELF_ST_TYPE (sym.st_info); + type = ELF_ST_TYPE (sym.st_info); /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */ if (type == STT_GNU_IFUNC) @@ -10470,11 +10669,13 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) break; default: { - /* FIXME: octets_per_byte. */ if (! (o->flags & SEC_EXCLUDE)) { file_ptr offset = (file_ptr) o->output_offset; bfd_size_type todo = o->size; + + offset *= bfd_octets_per_byte (output_bfd); + if ((o->flags & SEC_ELF_REVERSE_COPY)) { /* Reverse-copy input section to output. */ @@ -10592,9 +10793,8 @@ elf_reloc_link_order (bfd *output_bfd, } else { - if (! ((*info->callbacks->unattached_reloc) - (info, link_order->u.reloc.p->u.name, NULL, NULL, 0))) - return FALSE; + (*info->callbacks->unattached_reloc) + (info, link_order->u.reloc.p->u.name, NULL, NULL, 0); indx = 0; } } @@ -10629,17 +10829,16 @@ elf_reloc_link_order (bfd *output_bfd, link_order->u.reloc.p->u.section); else sym_name = link_order->u.reloc.p->u.name; - if (! ((*info->callbacks->reloc_overflow) - (info, NULL, sym_name, howto->name, addend, NULL, - NULL, (bfd_vma) 0))) - { - free (buf); - return FALSE; - } + (*info->callbacks->reloc_overflow) (info, NULL, sym_name, + howto->name, addend, NULL, NULL, + (bfd_vma) 0); break; } + ok = bfd_set_section_contents (output_bfd, output_section, buf, - link_order->offset, size); + link_order->offset + * bfd_octets_per_byte (output_bfd), + size); free (buf); if (! ok) return FALSE; @@ -10821,9 +11020,8 @@ elf_fixup_link_order (bfd *abfd, asection *o) { s = sections[n]->u.indirect.section; offset &= ~(bfd_vma) 0 << s->alignment_power; - s->output_offset = offset; + s->output_offset = offset / bfd_octets_per_byte (abfd); sections[n]->offset = offset; - /* FIXME: octets_per_byte. */ offset += sections[n]->size; } @@ -10831,6 +11029,108 @@ elf_fixup_link_order (bfd *abfd, asection *o) return TRUE; } +/* Generate an import library in INFO->implib_bfd from symbols in ABFD. + Returns TRUE upon success, FALSE otherwise. */ + +static bfd_boolean +elf_output_implib (bfd *abfd, struct bfd_link_info *info) +{ + bfd_boolean ret = FALSE; + bfd *implib_bfd; + const struct elf_backend_data *bed; + flagword flags; + enum bfd_architecture arch; + unsigned int mach; + asymbol **sympp = NULL; + long symsize; + long symcount; + long src_count; + elf_symbol_type *osymbuf; + + implib_bfd = info->out_implib_bfd; + bed = get_elf_backend_data (abfd); + + if (!bfd_set_format (implib_bfd, bfd_object)) + return FALSE; + + flags = bfd_get_file_flags (abfd); + flags &= ~HAS_RELOC; + if (!bfd_set_start_address (implib_bfd, 0) + || !bfd_set_file_flags (implib_bfd, flags)) + return FALSE; + + /* Copy architecture of output file to import library file. */ + arch = bfd_get_arch (abfd); + mach = bfd_get_mach (abfd); + if (!bfd_set_arch_mach (implib_bfd, arch, mach) + && (abfd->target_defaulted + || bfd_get_arch (abfd) != bfd_get_arch (implib_bfd))) + return FALSE; + + /* Get symbol table size. */ + symsize = bfd_get_symtab_upper_bound (abfd); + if (symsize < 0) + return FALSE; + + /* Read in the symbol table. */ + sympp = (asymbol **) xmalloc (symsize); + symcount = bfd_canonicalize_symtab (abfd, sympp); + if (symcount < 0) + goto free_sym_buf; + + /* Allow the BFD backend to copy any private header data it + understands from the output BFD to the import library BFD. */ + if (! bfd_copy_private_header_data (abfd, implib_bfd)) + goto free_sym_buf; + + /* Filter symbols to appear in the import library. */ + if (bed->elf_backend_filter_implib_symbols) + symcount = bed->elf_backend_filter_implib_symbols (abfd, info, sympp, + symcount); + else + symcount = _bfd_elf_filter_global_symbols (abfd, info, sympp, symcount); + if (symcount == 0) + { + bfd_set_error (bfd_error_no_symbols); + (*_bfd_error_handler) (_("%B: no symbol found for import library"), + implib_bfd); + goto free_sym_buf; + } + + + /* Make symbols absolute. */ + osymbuf = (elf_symbol_type *) bfd_alloc2 (implib_bfd, symcount, + sizeof (*osymbuf)); + for (src_count = 0; src_count < symcount; src_count++) + { + memcpy (&osymbuf[src_count], (elf_symbol_type *) sympp[src_count], + sizeof (*osymbuf)); + osymbuf[src_count].symbol.section = bfd_abs_section_ptr; + osymbuf[src_count].internal_elf_sym.st_shndx = SHN_ABS; + osymbuf[src_count].symbol.value += sympp[src_count]->section->vma; + osymbuf[src_count].internal_elf_sym.st_value = + osymbuf[src_count].symbol.value; + sympp[src_count] = &osymbuf[src_count].symbol; + } + + bfd_set_symtab (implib_bfd, sympp, symcount); + + /* Allow the BFD backend to copy any private data it understands + from the output BFD to the import library BFD. This is done last + to permit the routine to look at the filtered symbol table. */ + if (! bfd_copy_private_bfd_data (abfd, implib_bfd)) + goto free_sym_buf; + + if (!bfd_close (implib_bfd)) + goto free_sym_buf; + + ret = TRUE; + +free_sym_buf: + free (sympp); + return ret; +} + static void elf_final_link_free (bfd *obfd, struct elf_final_link_info *flinfo) { @@ -11615,7 +11915,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr; /* sh_name was set in prep_headers. */ symstrtab_hdr->sh_type = SHT_STRTAB; - symstrtab_hdr->sh_flags = 0; + symstrtab_hdr->sh_flags = bed->elf_strtab_flags; symstrtab_hdr->sh_addr = 0; symstrtab_hdr->sh_size = _bfd_elf_strtab_size (flinfo.symstrtab); symstrtab_hdr->sh_entsize = 0; @@ -11633,6 +11933,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) return FALSE; } + if (info->out_implib_bfd && !elf_output_implib (abfd, info)) + { + (*_bfd_error_handler) (_("%B: failed to generate import library"), + info->out_implib_bfd); + return FALSE; + } + /* Adjust the relocs to have the correct symbol indices. */ for (o = abfd->sections; o != NULL; o = o->next) { @@ -11729,18 +12036,18 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) case DT_PREINIT_ARRAYSZ: name = ".preinit_array"; - goto get_size; + goto get_out_size; case DT_INIT_ARRAYSZ: name = ".init_array"; - goto get_size; + goto get_out_size; case DT_FINI_ARRAYSZ: name = ".fini_array"; - get_size: + get_out_size: o = bfd_get_section_by_name (abfd, name); if (o == NULL) { (*_bfd_error_handler) - (_("%B: could not find output section %s"), abfd, name); + (_("could not find section %s"), name); goto error_return; } if (o->size == 0) @@ -11751,13 +12058,15 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) case DT_PREINIT_ARRAY: name = ".preinit_array"; - goto get_vma; + goto get_out_vma; case DT_INIT_ARRAY: name = ".init_array"; - goto get_vma; + goto get_out_vma; case DT_FINI_ARRAY: name = ".fini_array"; - goto get_vma; + get_out_vma: + o = bfd_get_section_by_name (abfd, name); + goto do_vma; case DT_HASH: name = ".hash"; @@ -11780,11 +12089,12 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) case DT_VERSYM: name = ".gnu.version"; get_vma: - o = bfd_get_section_by_name (abfd, name); + o = bfd_get_linker_section (dynobj, name); + do_vma: if (o == NULL) { (*_bfd_error_handler) - (_("%B: could not find output section %s"), abfd, name); + (_("could not find section %s"), name); goto error_return; } if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE) @@ -11794,7 +12104,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) bfd_set_error (bfd_error_nonrepresentable_section); goto error_return; } - dyn.d_un.d_ptr = o->vma; + dyn.d_un.d_ptr = o->output_section->vma + o->output_offset; break; case DT_REL: @@ -11883,10 +12193,10 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) continue; if (strcmp (o->name, ".dynstr") != 0) { - /* FIXME: octets_per_byte. */ if (! bfd_set_section_contents (abfd, o->output_section, o->contents, - (file_ptr) o->output_offset, + (file_ptr) o->output_offset + * bfd_octets_per_byte (abfd), o->size)) goto error_return; } @@ -12110,6 +12420,55 @@ _bfd_elf_gc_mark_hook (asection *sec, return NULL; } +/* For undefined __start_ and __stop_ symbols, return the + first input section matching . Return NULL otherwise. */ + +asection * +_bfd_elf_is_start_stop (const struct bfd_link_info *info, + struct elf_link_hash_entry *h) +{ + asection *s; + const char *sec_name; + + if (h->root.type != bfd_link_hash_undefined + && h->root.type != bfd_link_hash_undefweak) + return NULL; + + s = h->root.u.undef.section; + if (s != NULL) + { + if (s == (asection *) 0 - 1) + return NULL; + return s; + } + + sec_name = NULL; + if (strncmp (h->root.root.string, "__start_", 8) == 0) + sec_name = h->root.root.string + 8; + else if (strncmp (h->root.root.string, "__stop_", 7) == 0) + sec_name = h->root.root.string + 7; + + if (sec_name != NULL && *sec_name != '\0') + { + bfd *i; + + for (i = info->input_bfds; i != NULL; i = i->link.next) + { + s = bfd_get_section_by_name (i, sec_name); + if (s != NULL) + { + h->root.u.undef.section = s; + break; + } + } + } + + if (s == NULL) + h->root.u.undef.section = (asection *) 0 - 1; + + return s; +} + /* 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. */ @@ -12148,34 +12507,19 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec, if (h->u.weakdef != NULL) h->u.weakdef->mark = 1; - if (start_stop != NULL - && (h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak)) + if (start_stop != NULL) { /* To work around a glibc bug, mark all XXX input sections when there is an as yet undefined reference to __start_XXX or __stop_XXX symbols. The linker will later define such symbols for orphan input sections that have a name representable as a C identifier. */ - const char *sec_name = NULL; - if (strncmp (h->root.root.string, "__start_", 8) == 0) - sec_name = h->root.root.string + 8; - else if (strncmp (h->root.root.string, "__stop_", 7) == 0) - sec_name = h->root.root.string + 7; + asection *s = _bfd_elf_is_start_stop (info, h); - if (sec_name != NULL && *sec_name != '\0') + if (s != NULL) { - bfd *i; - - for (i = info->input_bfds; i != NULL; i = i->link.next) - { - asection *s = bfd_get_section_by_name (i, sec_name); - if (s != NULL && !s->gc_mark) - { - *start_stop = TRUE; - return s; - } - } + *start_stop = !s->gc_mark; + return s; } } @@ -12823,7 +13167,7 @@ bfd_elf_gc_record_vtinherit (bfd *abfd, { struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; struct elf_link_hash_entry **search, *child; - bfd_size_type extsymcount; + size_t extsymcount; const struct elf_backend_data *bed = get_elf_backend_data (abfd); /* The sh_info field of the symtab header tells us where the @@ -13096,7 +13440,7 @@ bfd_elf_gc_common_finalize_got_offsets (bfd *abfd, for (i = info->input_bfds; i; i = i->link.next) { bfd_signed_vma *local_got; - bfd_size_type j, locsymcount; + size_t j, locsymcount; Elf_Internal_Shdr *symtab_hdr; if (bfd_get_flavour (i) != bfd_target_elf_flavour) diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index c955877..734ebf6 100644 --- a/bfd/elfn32-mips.c +++ b/bfd/elfn32-mips.c @@ -1847,6 +1847,21 @@ static reloc_howto_type elf_mips16_howto_table_rel[] = 0x0000ffff, /* src_mask */ 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* MIPS16 16-bit PC-relative branch offset. */ + HOWTO (R_MIPS16_PC16_S1, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_PC16_S1", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + TRUE), /* pcrel_offset */ }; static reloc_howto_type elf_mips16_howto_table_rela[] = @@ -2048,6 +2063,21 @@ static reloc_howto_type elf_mips16_howto_table_rela[] = 0, /* src_mask */ 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* MIPS16 16-bit PC-relative branch offset. */ + HOWTO (R_MIPS16_PC16_S1, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_PC16_S1", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + TRUE), /* pcrel_offset */ }; static reloc_howto_type elf_micromips_howto_table_rel[] = @@ -3231,7 +3261,8 @@ static const struct elf_reloc_map mips16_reloc_map[] = R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min }, { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min }, - { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min } + { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }, + { BFD_RELOC_MIPS16_16_PCREL_S1, R_MIPS16_PC16_S1 - R_MIPS16_min } }; static const struct elf_reloc_map micromips_reloc_map[] = diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 99acab4..3435a3d 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -339,8 +339,8 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = /* Basic data relocations. */ -#if ARCH_SIZE == 64 - HOWTO (R_AARCH64_NULL, /* type */ + /* Deprecated, but retained for backwards compatibility. */ + HOWTO64 (R_AARCH64_NULL, /* type */ 0, /* rightshift */ 3, /* size (0 = byte, 1 = short, 2 = long) */ 0, /* bitsize */ @@ -353,7 +353,6 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = 0, /* src_mask */ 0, /* dst_mask */ FALSE), /* pcrel_offset */ -#else HOWTO (R_AARCH64_NONE, /* type */ 0, /* rightshift */ 3, /* size (0 = byte, 1 = short, 2 = long) */ @@ -367,7 +366,6 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = 0, /* src_mask */ 0, /* dst_mask */ FALSE), /* pcrel_offset */ -#endif /* .xword: (S+A) */ HOWTO64 (AARCH64_R (ABS64), /* type */ @@ -575,7 +573,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = HOWTO (AARCH64_R (MOVW_SABS_G0), /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ + 17, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ @@ -590,7 +588,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = HOWTO64 (AARCH64_R (MOVW_SABS_G1), /* type */ 16, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ + 17, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ @@ -605,7 +603,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = HOWTO64 (AARCH64_R (MOVW_SABS_G2), /* type */ 32, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ + 17, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ @@ -2289,6 +2287,9 @@ struct elf_aarch64_link_hash_table /* Enable ADRP->ADR rewrite for erratum 843419 workaround. */ int fix_erratum_843419_adr; + /* Don't apply link-time values for dynamic relocations. */ + int no_apply_dynamic_relocs; + /* The number of bytes in the initial entry in the PLT. */ bfd_size_type plt_header_size; @@ -2639,34 +2640,21 @@ aarch64_select_branch_stub (bfd_vma value, bfd_vma place) /* Determine the type of stub needed, if any, for a call. */ static enum elf_aarch64_stub_type -aarch64_type_of_stub (struct bfd_link_info *info, - asection *input_sec, +aarch64_type_of_stub (asection *input_sec, const Elf_Internal_Rela *rel, asection *sym_sec, unsigned char st_type, - struct elf_aarch64_link_hash_entry *hash, bfd_vma destination) { bfd_vma location; bfd_signed_vma branch_offset; unsigned int r_type; - struct elf_aarch64_link_hash_table *globals; enum elf_aarch64_stub_type stub_type = aarch64_stub_none; - bfd_boolean via_plt_p; if (st_type != STT_FUNC && (sym_sec == input_sec)) return stub_type; - globals = elf_aarch64_hash_table (info); - via_plt_p = (globals->root.splt != NULL && hash != NULL - && hash->root.plt.offset != (bfd_vma) - 1); - /* Make sure call to plt stub can fit into the branch range. */ - if (via_plt_p) - destination = (globals->root.splt->output_section->vma - + globals->root.splt->output_offset - + hash->root.plt.offset); - /* Determine where the call point is. */ location = (input_sec->output_offset + input_sec->output_section->vma + rel->r_offset); @@ -4142,8 +4130,8 @@ elfNN_aarch64_size_stubs (bfd *output_bfd, } /* Determine what (if any) linker stub is needed. */ - stub_type = aarch64_type_of_stub - (info, section, irela, sym_sec, st_type, hash, destination); + stub_type = aarch64_type_of_stub (section, irela, sym_sec, + st_type, destination); if (stub_type == aarch64_stub_none) continue; @@ -4347,7 +4335,8 @@ bfd_elfNN_aarch64_set_options (struct bfd *output_bfd, int no_enum_warn, int no_wchar_warn, int pic_veneer, int fix_erratum_835769, - int fix_erratum_843419) + int fix_erratum_843419, + int no_apply_dynamic_relocs) { struct elf_aarch64_link_hash_table *globals; @@ -4356,6 +4345,7 @@ bfd_elfNN_aarch64_set_options (struct bfd *output_bfd, globals->fix_erratum_835769 = fix_erratum_835769; globals->fix_erratum_843419 = fix_erratum_843419; globals->fix_erratum_843419_adr = TRUE; + globals->no_apply_dynamic_relocs = no_apply_dynamic_relocs; BFD_ASSERT (is_aarch64_elf (output_bfd)); elf_aarch64_tdata (output_bfd)->no_enum_size_warning = no_enum_warn; @@ -4903,7 +4893,9 @@ elfNN_aarch64_write_section (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } -/* Perform a relocation as part of a final link. */ +/* Perform a relocation as part of a final link. The input relocation type + should be TLS relaxed. */ + static bfd_reloc_status_type elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, bfd *input_bfd, @@ -4924,7 +4916,6 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, unsigned int r_type = howto->type; bfd_reloc_code_real_type bfd_r_type = elfNN_aarch64_bfd_reloc_from_howto (howto); - bfd_reloc_code_real_type new_bfd_r_type; unsigned long r_symndx; bfd_byte *hit_data = contents + rel->r_offset; bfd_vma place, off; @@ -4941,17 +4932,6 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, r_symndx = ELFNN_R_SYM (rel->r_info); - /* It is possible to have linker relaxations on some TLS access - models. Update our information here. */ - new_bfd_r_type = aarch64_tls_transition (input_bfd, info, r_type, h, r_symndx); - if (new_bfd_r_type != bfd_r_type) - { - bfd_r_type = new_bfd_r_type; - howto = elfNN_aarch64_howto_from_bfd_reloc (bfd_r_type); - BFD_ASSERT (howto != NULL); - r_type = howto->type; - } - place = input_section->output_section->vma + input_section->output_offset + rel->r_offset; @@ -5221,6 +5201,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, relocate the text and data segments independently, so the symbol does not matter. */ symbol = 0; + relocate = globals->no_apply_dynamic_relocs ? FALSE : TRUE; outrel.r_info = ELFNN_R_INFO (symbol, AARCH64_R (RELATIVE)); outrel.r_addend += value; } @@ -6082,13 +6063,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, if (r_type != R_AARCH64_NONE && r_type != R_AARCH64_NULL && 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; - } + (*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); relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); @@ -6430,10 +6408,9 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, switch (r) { case bfd_reloc_overflow: - if (!(*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset)) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0, + input_bfd, input_section, rel->r_offset); if (real_r_type == BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15 || real_r_type == BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14) { @@ -6475,10 +6452,8 @@ alignment than was declared where it was defined."), break; case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -6499,10 +6474,8 @@ alignment than was declared where it was defined."), common_error: BFD_ASSERT (error_message != NULL); - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, rel->r_offset); break; } } @@ -7093,6 +7066,22 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, if (h != NULL) { + /* If a relocation refers to _GLOBAL_OFFSET_TABLE_, create the .got. + This shows up in particular in an R_AARCH64_PREL64 in large model + when calculating the pc-relative address to .got section which is + used to initialize the gp register. */ + if (h->root.root.string + && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) + { + if (htab->root.dynobj == NULL) + htab->root.dynobj = abfd; + + if (! aarch64_elf_create_got_section (htab->root.dynobj, info)) + return FALSE; + + BFD_ASSERT (h == htab->root.hgot); + } + /* 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 @@ -8246,9 +8235,11 @@ elfNN_aarch64_allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h, && h->def_regular) return _bfd_elf_allocate_ifunc_dyn_relocs (info, h, &eh->dyn_relocs, + NULL, htab->plt_entry_size, htab->plt_header_size, - GOT_ENTRY_SIZE); + GOT_ENTRY_SIZE, + FALSE); return TRUE; } @@ -9053,7 +9044,8 @@ elfNN_aarch64_finish_dynamic_sections (bfd *output_bfd, break; case DT_JMPREL: - dyn.d_un.d_ptr = htab->root.srelplt->output_section->vma; + s = htab->root.srelplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_PLTRELSZ: @@ -9220,6 +9212,40 @@ elfNN_aarch64_plt_sym_val (bfd_vma i, const asection *plt, return plt->vma + PLT_ENTRY_SIZE + i * PLT_SMALL_ENTRY_SIZE; } +/* Returns TRUE if NAME is an AArch64 mapping symbol. + The ARM ELF standard defines $x (for A64 code) and $d (for data). + It also allows a period initiated suffix to be added to the symbol, ie: + "$[adtx]\.[:sym_char]+". */ + +static bfd_boolean +is_aarch64_mapping_symbol (const char * name) +{ + return name != NULL /* Paranoia. */ + && name[0] == '$' /* Note: if objcopy --prefix-symbols has been used then + the mapping symbols could have acquired a prefix. + We do not support this here, since such symbols no + longer conform to the ARM ELF ABI. */ + && (name[1] == 'd' || name[1] == 'x') + && (name[2] == 0 || name[2] == '.'); + /* FIXME: Strictly speaking the symbol is only a valid mapping symbol if + any characters that follow the period are legal characters for the body + of a symbol's name. For now we just assume that this is the case. */ +} + +/* Make sure that mapping symbols in object files are not removed via the + "strip --strip-unneeded" tool. These symbols might needed in order to + correctly generate linked files. Once an object file has been linked, + it should be safe to remove them. */ + +static void +elfNN_aarch64_backend_symbol_processing (bfd *abfd, asymbol *sym) +{ + if (((abfd->flags & (EXEC_P | DYNAMIC)) == 0) + && sym->section != bfd_abs_section_ptr + && is_aarch64_mapping_symbol (sym->name)) + sym->flags |= BSF_KEEP; +} + /* We use this so we can override certain functions (though currently we don't). */ @@ -9359,6 +9385,9 @@ const struct elf_size_info elfNN_aarch64_size_info = #define elf_backend_write_section \ elfNN_aarch64_write_section +#define elf_backend_symbol_processing \ + elfNN_aarch64_backend_symbol_processing + #define elf_backend_can_refcount 1 #define elf_backend_can_gc_sections 1 #define elf_backend_plt_readonly 1 diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c index 2258297..b8e0e76 100644 --- a/bfd/elfnn-ia64.c +++ b/bfd/elfnn-ia64.c @@ -4428,10 +4428,9 @@ elfNN_ia64_relocate_section (bfd *output_bfd, else name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sym_sec); - if (!(*info->callbacks->warning) (info, _("unsupported reloc"), - name, input_bfd, - input_section, rel->r_offset)) - return FALSE; + (*info->callbacks->warning) (info, _("unsupported reloc"), + name, input_bfd, + input_section, rel->r_offset); ret_val = FALSE; } break; @@ -4487,15 +4486,14 @@ missing_tls_sec: break; } default: - if (!(*info->callbacks->reloc_overflow) (info, - &h->root, - name, - howto->name, - (bfd_vma) 0, - input_bfd, - input_section, - rel->r_offset)) - return FALSE; + (*info->callbacks->reloc_overflow) (info, + &h->root, + name, + howto->name, + (bfd_vma) 0, + input_bfd, + input_section, + rel->r_offset); break; } diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c index 498171c..c861170 100644 --- a/bfd/elfxx-aarch64.c +++ b/bfd/elfxx-aarch64.c @@ -538,11 +538,10 @@ _bfd_aarch64_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, asection **secp ATTRIBUTE_UNUSED, bfd_vma *valp ATTRIBUTE_UNUSED) { - if ((ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE) + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC && (abfd->flags & DYNAMIC) == 0 && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour) - elf_tdata (info->output_bfd)->has_gnu_symbols = elf_gnu_symbol_any; + elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc; return TRUE; } diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index fa14e8d..cdc5d96 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -1580,17 +1580,20 @@ mips_elf_create_stub_symbol (struct bfd_link_info *info, { struct bfd_link_hash_entry *bh; struct elf_link_hash_entry *elfh; - const char *name; + char *name; + bfd_boolean res; if (ELF_ST_IS_MICROMIPS (h->root.other)) value |= 1; /* Create a new symbol. */ - name = ACONCAT ((prefix, h->root.root.root.string, NULL)); + name = concat (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)) + res = _bfd_generic_link_add_one_symbol (info, s->owner, name, + BSF_LOCAL, s, value, NULL, + TRUE, FALSE, &bh); + free (name); + if (! res) return FALSE; /* Make it a local function. */ @@ -1612,9 +1615,10 @@ mips_elf_create_shadow_symbol (struct bfd_link_info *info, { struct bfd_link_hash_entry *bh; struct elf_link_hash_entry *elfh; - const char *name; + char *name; asection *s; bfd_vma value; + bfd_boolean res; /* Read the symbol's value. */ BFD_ASSERT (h->root.root.type == bfd_link_hash_defined @@ -1623,11 +1627,13 @@ mips_elf_create_shadow_symbol (struct bfd_link_info *info, value = h->root.root.u.def.value; /* Create a new symbol. */ - name = ACONCAT ((prefix, h->root.root.root.string, NULL)); + name = concat (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)) + res = _bfd_generic_link_add_one_symbol (info, s->owner, name, + BSF_LOCAL, s, value, NULL, + TRUE, FALSE, &bh); + free (name); + if (! res) return FALSE; /* Make it local and copy the other attributes from H. */ @@ -2084,7 +2090,11 @@ mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data) 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. */ + little-endian system. + + Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the + relocatable field is shifted by 1 rather than 2 and the same bit + shuffling is done as with the relocations above. */ static inline bfd_boolean mips16_reloc_p (int r_type) @@ -2104,6 +2114,7 @@ mips16_reloc_p (int r_type) case R_MIPS16_TLS_GOTTPREL: case R_MIPS16_TLS_TPREL_HI16: case R_MIPS16_TLS_TPREL_LO16: + case R_MIPS16_PC16_S1: return TRUE; default: @@ -2210,6 +2221,19 @@ jal_reloc_p (int r_type) } static inline bfd_boolean +b_reloc_p (int r_type) +{ + return (r_type == R_MIPS_PC26_S2 + || r_type == R_MIPS_PC21_S2 + || r_type == R_MIPS_PC16 + || r_type == R_MIPS_GNU_REL16_S2 + || r_type == R_MIPS16_PC16_S1 + || r_type == R_MICROMIPS_PC16_S1 + || r_type == R_MICROMIPS_PC10_S1 + || r_type == R_MICROMIPS_PC7_S1); +} + +static inline bfd_boolean aligned_pcrel_reloc_p (int r_type) { return (r_type == R_MIPS_PC18_S3 @@ -2217,6 +2241,23 @@ aligned_pcrel_reloc_p (int r_type) } static inline bfd_boolean +branch_reloc_p (int r_type) +{ + return (r_type == R_MIPS_26 + || r_type == R_MIPS_PC26_S2 + || r_type == R_MIPS_PC21_S2 + || r_type == R_MIPS_PC16 + || r_type == R_MIPS_GNU_REL16_S2); +} + +static inline bfd_boolean +mips16_branch_reloc_p (int r_type) +{ + return (r_type == R_MIPS16_26 + || r_type == R_MIPS16_PC16_S1); +} + +static inline bfd_boolean micromips_branch_reloc_p (int r_type) { return (r_type == R_MICROMIPS_26_S1 @@ -5241,6 +5282,9 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, /* TRUE if the symbol referred to by this relocation is a local symbol. */ bfd_boolean local_p, was_local_p; + /* TRUE if the symbol referred to by this relocation is a section + symbol. */ + bfd_boolean section_p = FALSE; /* TRUE if the symbol referred to by this relocation is "_gp_disp". */ bfd_boolean gp_disp_p = FALSE; /* TRUE if the symbol referred to by this relocation is @@ -5291,17 +5335,18 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, /* Figure out the value of the symbol. */ if (local_p) { + bfd_boolean micromips_p = MICROMIPS_P (abfd); Elf_Internal_Sym *sym; sym = local_syms + r_symndx; sec = local_sections[r_symndx]; + section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION; + symbol = sec->output_section->vma + sec->output_offset; - if (ELF_ST_TYPE (sym->st_info) != STT_SECTION - || (sec->flags & SEC_MERGE)) + if (!section_p || (sec->flags & SEC_MERGE)) symbol += sym->st_value; - if ((sec->flags & SEC_MERGE) - && ELF_ST_TYPE (sym->st_info) == STT_SECTION) + if ((sec->flags & SEC_MERGE) && section_p) { addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend); addend -= symbol; @@ -5316,11 +5361,29 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, *namep = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link, sym->st_name); - if (*namep == '\0') + if (*namep == NULL || **namep == '\0') *namep = bfd_section_name (input_bfd, sec); - target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other); - target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other); + /* For relocations against a section symbol and ones against no + symbol (absolute relocations) infer the ISA mode from the addend. */ + if (section_p || r_symndx == STN_UNDEF) + { + target_is_16_bit_code_p = (addend & 1) && !micromips_p; + target_is_micromips_code_p = (addend & 1) && micromips_p; + } + /* For relocations against an absolute symbol infer the ISA mode + from the value of the symbol plus addend. */ + else if (bfd_is_abs_section (sec)) + { + target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p; + target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p; + } + /* Otherwise just use the regular symbol annotation available. */ + else + { + target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other); + target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other); + } } else { @@ -5404,17 +5467,14 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */ symbol = 0; } - else if ((*info->callbacks->undefined_symbol) - (info, h->root.root.root.string, input_bfd, - input_section, relocation->r_offset, - (info->unresolved_syms_in_objects == RM_GENERATE_ERROR) - || ELF_ST_VISIBILITY (h->root.other))) - { - return bfd_reloc_undefined; - } else { - return bfd_reloc_notsupported; + (*info->callbacks->undefined_symbol) + (info, h->root.root.root.string, input_bfd, + input_section, relocation->r_offset, + (info->unresolved_syms_in_objects == RM_GENERATE_ERROR) + || ELF_ST_VISIBILITY (h->root.other)); + return bfd_reloc_undefined; } target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other); @@ -5525,7 +5585,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, case the symbol will have been set by mips_elf_set_plt_sym_value to point to the standard PLT entry, so redirect to the compressed one. */ - else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1) + else if ((mips16_branch_reloc_p (r_type) + || micromips_branch_reloc_p (r_type)) && !bfd_link_relocatable (info) && h != NULL && h->use_plt_entry @@ -5547,7 +5608,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, } /* Make sure MIPS16 and microMIPS are not used together. */ - if ((r_type == R_MIPS16_26 && target_is_micromips_code_p) + if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p) || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p)) { (*_bfd_error_handler) @@ -5563,10 +5624,12 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, acceptable. */ *cross_mode_jump_p = (!bfd_link_relocatable (info) && !(h && h->root.root.type == bfd_link_hash_undefweak) - && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p) - || (r_type == R_MICROMIPS_26_S1 + && ((mips16_branch_reloc_p (r_type) + && !target_is_16_bit_code_p) + || (micromips_branch_reloc_p (r_type) && !target_is_micromips_code_p) - || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR) + || ((branch_reloc_p (r_type) + || r_type == R_MIPS_JALR) && (target_is_16_bit_code_p || target_is_micromips_code_p)))); @@ -5767,22 +5830,26 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, { unsigned int shift; - /* Make sure the target of JALX is word-aligned. Bit 0 must be - the correct ISA mode selector and bit 1 must be 0. */ - if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26)) - return bfd_reloc_outofrange; - /* Shift is 2, unusually, for microMIPS JALX. */ shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2; - if (was_local_p) - value = addend | ((p + 4) & (0xfc000000 << shift)); - else if (howto->partial_inplace) + if (howto->partial_inplace && !section_p) value = _bfd_mips_elf_sign_extend (addend, 26 + shift); else value = addend; - value = (value + symbol) >> shift; - if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak) + value += symbol; + + /* Make sure the target of a jump is suitably aligned. Bit 0 must + be the correct ISA mode selector except for weak undefined + symbols. */ + if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) + && (*cross_mode_jump_p + ? (value & 3) != (r_type == R_MIPS_26) + : (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26))) + return bfd_reloc_outofrange; + + value >>= shift; + if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift)); value &= howto->dst_mask; } @@ -5969,7 +6036,12 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, if (howto->partial_inplace) addend = _bfd_mips_elf_sign_extend (addend, 18); - if ((symbol + addend) & 3) + /* No need to exclude weak undefined symbols here as they resolve + to 0 and never set `*cross_mode_jump_p', so this alignment check + will never trigger for them. */ + if (*cross_mode_jump_p + ? ((symbol + addend) & 3) != 1 + : ((symbol + addend) & 3) != 0) return bfd_reloc_outofrange; value = symbol + addend - p; @@ -5979,6 +6051,23 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, value &= howto->dst_mask; break; + case R_MIPS16_PC16_S1: + if (howto->partial_inplace) + addend = _bfd_mips_elf_sign_extend (addend, 17); + + if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) + && (*cross_mode_jump_p + ? ((symbol + addend) & 3) != 0 + : ((symbol + addend) & 1) == 0)) + return bfd_reloc_outofrange; + + value = symbol + addend - p; + if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) + overflowed_p = mips_elf_overflow_p (value, 17); + value >>= howto->rightshift; + value &= howto->dst_mask; + break; + case R_MIPS_PC21_S2: if (howto->partial_inplace) addend = _bfd_mips_elf_sign_extend (addend, 23); @@ -6052,6 +6141,13 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, case R_MICROMIPS_PC7_S1: if (howto->partial_inplace) addend = _bfd_mips_elf_sign_extend (addend, 8); + + if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) + && (*cross_mode_jump_p + ? ((symbol + addend + 2) & 3) != 0 + : ((symbol + addend + 2) & 1) == 0)) + return bfd_reloc_outofrange; + value = symbol + addend - p; if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) overflowed_p = mips_elf_overflow_p (value, 8); @@ -6062,6 +6158,13 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, case R_MICROMIPS_PC10_S1: if (howto->partial_inplace) addend = _bfd_mips_elf_sign_extend (addend, 11); + + if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) + && (*cross_mode_jump_p + ? ((symbol + addend + 2) & 3) != 0 + : ((symbol + addend + 2) & 1) == 0)) + return bfd_reloc_outofrange; + value = symbol + addend - p; if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) overflowed_p = mips_elf_overflow_p (value, 11); @@ -6072,6 +6175,13 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, case R_MICROMIPS_PC16_S1: if (howto->partial_inplace) addend = _bfd_mips_elf_sign_extend (addend, 17); + + if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak) + && (*cross_mode_jump_p + ? ((symbol + addend) & 3) != 0 + : ((symbol + addend) & 1) == 0)) + return bfd_reloc_outofrange; + value = symbol + addend - p; if (was_local_p || h->root.root.type != bfd_link_hash_undefweak) overflowed_p = mips_elf_overflow_p (value, 17); @@ -6230,7 +6340,21 @@ mips_elf_perform_relocation (struct bfd_link_info *info, /* Set the field. */ x |= (value & howto->dst_mask); - /* If required, turn JAL into JALX. */ + /* Detect incorrect JALX usage. If required, turn JAL or BAL into JALX. */ + if (!cross_mode_jump_p && jal_reloc_p (r_type)) + { + bfd_vma opcode = x >> 26; + + if (r_type == R_MIPS16_26 ? opcode == 0x7 + : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c + : opcode == 0x1d) + { + info->callbacks->einfo + (_("%X%H: Unsupported JALX to the same ISA mode\n"), + input_bfd, input_section, relocation->r_offset); + return TRUE; + } + } if (cross_mode_jump_p && jal_reloc_p (r_type)) { bfd_boolean ok; @@ -6258,18 +6382,63 @@ mips_elf_perform_relocation (struct bfd_link_info *info, convert J or JALS to JALX. */ if (!ok) { - (*_bfd_error_handler) - (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."), - input_bfd, - input_section, - (unsigned long) relocation->r_offset); - bfd_set_error (bfd_error_bad_value); - return FALSE; + info->callbacks->einfo + (_("%X%H: Unsupported jump between ISA modes; " + "consider recompiling with interlinking enabled\n"), + input_bfd, input_section, relocation->r_offset); + return TRUE; } /* Make this the JALX opcode. */ x = (x & ~(0x3f << 26)) | (jalx_opcode << 26); } + else if (cross_mode_jump_p && b_reloc_p (r_type)) + { + bfd_boolean ok = FALSE; + bfd_vma opcode = x >> 16; + bfd_vma jalx_opcode = 0; + bfd_vma addr; + bfd_vma dest; + + if (r_type == R_MICROMIPS_PC16_S1) + { + ok = opcode == 0x4060; + jalx_opcode = 0x3c; + value <<= 1; + } + else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2) + { + ok = opcode == 0x411; + jalx_opcode = 0x1d; + value <<= 2; + } + + if (bfd_link_pic (info) || !ok) + { + info->callbacks->einfo + (_("%X%H: Unsupported branch between ISA modes\n"), + input_bfd, input_section, relocation->r_offset); + return TRUE; + } + + addr = (input_section->output_section->vma + + input_section->output_offset + + relocation->r_offset + + 4); + dest = addr + (((value & 0x3ffff) ^ 0x20000) - 0x20000); + + if ((addr >> 28) << 28 != (dest >> 28) << 28) + { + info->callbacks->einfo + (_("%X%H: Cannot convert branch between ISA modes " + "to JALX: relocation out of range\n"), + input_bfd, input_section, relocation->r_offset); + return TRUE; + } + + /* Make this the JALX opcode. */ + x = ((dest >> 2) & 0x3ffffff) | jalx_opcode << 26; + } /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in range. */ @@ -7774,16 +7943,24 @@ mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel, bfd_byte *location; unsigned int r_type; bfd_vma addend; + bfd_vma bytes; 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_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location); - addend = mips_elf_obtain_contents (howto, rel, abfd, contents); + bytes = mips_elf_obtain_contents (howto, rel, abfd, contents); _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location); - return addend & howto->src_mask; + addend = bytes & howto->src_mask; + + /* Shift is 2, unusually, for microMIPS JALX. Adjust the addend + accordingly. */ + if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c) + addend <<= 1; + + return addend; } /* REL is a relocation in ABFD that needs a partnering LO16 relocation @@ -8325,6 +8502,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_MIPS_PC21_S2: case R_MIPS_PC26_S2: case R_MIPS16_26: + case R_MIPS16_PC16_S1: case R_MICROMIPS_26_S1: case R_MICROMIPS_PC7_S1: case R_MICROMIPS_PC10_S1: @@ -8618,7 +8796,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, a PLT entry is not created because the symbol is satisfied locally. */ if (h != NULL - && jal_reloc_p (r_type) + && (branch_reloc_p (r_type) + || mips16_branch_reloc_p (r_type) + || micromips_branch_reloc_p (r_type)) && !SYMBOL_CALLS_LOCAL (info, h)) { if (h->plt.plist == NULL) @@ -8626,7 +8806,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, if (h->plt.plist == NULL) return FALSE; - if (r_type == R_MIPS_26) + if (branch_reloc_p (r_type)) h->plt.plist->need_mips = TRUE; else h->plt.plist->need_comp = TRUE; @@ -10234,10 +10414,9 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, htab->small_data_overflow_reported = TRUE; (*info->callbacks->einfo) ("%P: %s\n", msg); } - if (! ((*info->callbacks->reloc_overflow) - (info, NULL, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) - return FALSE; + (*info->callbacks->reloc_overflow) + (info, NULL, name, howto->name, (bfd_vma) 0, + input_bfd, input_section, rel->r_offset); } break; @@ -10245,19 +10424,26 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, break; case bfd_reloc_outofrange: + msg = NULL; if (jal_reloc_p (howto->type)) + msg = (cross_mode_jump_p + ? _("Cannot convert a jump to JALX " + "for a non-word-aligned address") + : (howto->type == R_MIPS16_26 + ? _("Jump to a non-word-aligned address") + : _("Jump to a non-instruction-aligned address"))); + else if (b_reloc_p (howto->type)) + msg = (cross_mode_jump_p + ? _("Cannot convert a branch to JALX " + "for a non-word-aligned address") + : _("Branch to a non-instruction-aligned address")); + else if (aligned_pcrel_reloc_p (howto->type)) + msg = _("PC-relative load from unaligned address"); + if (msg) { - msg = _("JALX to a non-word-aligned address"); - info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - return FALSE; - } - if (aligned_pcrel_reloc_p (howto->type)) - { - msg = _("PC-relative load from unaligned address"); - info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - return FALSE; + info->callbacks->einfo + ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg); + break; } /* Fall through. */ @@ -11455,7 +11641,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, case DT_MIPS_SYMTABNO: name = ".dynsym"; elemsize = MIPS_ELF_SYM_SIZE (output_bfd); - s = bfd_get_section_by_name (output_bfd, name); + s = bfd_get_linker_section (dynobj, name); if (s != NULL) dyn.d_un.d_val = s->size / elemsize; @@ -12916,25 +13102,22 @@ _bfd_elf_mips_get_relocated_section_contents switch (r) { case bfd_reloc_undefined: - if (!((*link_info->callbacks->undefined_symbol) - (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), - input_bfd, input_section, (*parent)->address, TRUE))) - goto error_return; + (*link_info->callbacks->undefined_symbol) + (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + input_bfd, input_section, (*parent)->address, TRUE); break; case bfd_reloc_dangerous: BFD_ASSERT (error_message != NULL); - if (!((*link_info->callbacks->reloc_dangerous) - (link_info, error_message, input_bfd, input_section, - (*parent)->address))) - goto error_return; + (*link_info->callbacks->reloc_dangerous) + (link_info, error_message, + input_bfd, input_section, (*parent)->address); break; case bfd_reloc_overflow: - if (!((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*(*parent)->sym_ptr_ptr), - (*parent)->howto->name, (*parent)->addend, - input_bfd, input_section, (*parent)->address))) - goto error_return; + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, + bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + (*parent)->howto->name, (*parent)->addend, + input_bfd, input_section, (*parent)->address); break; case bfd_reloc_outofrange: default: @@ -15554,6 +15737,8 @@ print_mips_ases (FILE *file, unsigned int mask) fputs ("\n\tDSP ASE", file); if (mask & AFL_ASE_DSPR2) fputs ("\n\tDSP R2 ASE", file); + if (mask & AFL_ASE_DSPR3) + fputs ("\n\tDSP R3 ASE", file); if (mask & AFL_ASE_EVA) fputs ("\n\tEnhanced VA Scheme", file); if (mask & AFL_ASE_MCU) @@ -16140,6 +16325,9 @@ _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info) if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64 || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A) i_ehdrp->e_ident[EI_ABIVERSION] = 3; + + if (elf_stack_flags (abfd) && !(elf_stack_flags (abfd) & PF_X)) + i_ehdrp->e_ident[EI_ABIVERSION] = 5; } int diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c index fc12805..63558c7 100644 --- a/bfd/elfxx-sparc.c +++ b/bfd/elfxx-sparc.c @@ -3481,7 +3481,8 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, } else { - if (r_type == R_SPARC_32 || r_type == R_SPARC_64) + if ( (!ABI_64_P (output_bfd) && r_type == R_SPARC_32) + || (ABI_64_P (output_bfd) && r_type == R_SPARC_64)) { outrel.r_info = SPARC_ELF_R_INFO (htab, NULL, 0, R_SPARC_RELATIVE); @@ -4199,11 +4200,9 @@ do_relocation: if (*name == '\0') name = bfd_section_name (input_bfd, sec); } - 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; + (*info->callbacks->reloc_overflow) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); } break; } @@ -4630,13 +4629,13 @@ sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info, { asection *s; - s = bfd_get_section_by_name (output_bfd, name); + s = bfd_get_linker_section (dynobj, name); if (s == NULL) dyn.d_un.d_val = 0; else { if (! size) - dyn.d_un.d_ptr = s->vma; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; else dyn.d_un.d_val = s->size; } @@ -4832,11 +4831,49 @@ _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i bfd_boolean _bfd_sparc_elf_object_p (bfd *abfd) { + obj_attribute *attrs = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU]; + obj_attribute *hwcaps = &attrs[Tag_GNU_Sparc_HWCAPS]; + obj_attribute *hwcaps2 = &attrs[Tag_GNU_Sparc_HWCAPS2]; + + unsigned int v9c_hwcaps_mask = ELF_SPARC_HWCAP_ASI_BLK_INIT; + unsigned int v9d_hwcaps_mask = (ELF_SPARC_HWCAP_FMAF + | ELF_SPARC_HWCAP_VIS3 + | ELF_SPARC_HWCAP_HPC); + unsigned int v9e_hwcaps_mask = (ELF_SPARC_HWCAP_AES + | ELF_SPARC_HWCAP_DES + | ELF_SPARC_HWCAP_KASUMI + | ELF_SPARC_HWCAP_CAMELLIA + | ELF_SPARC_HWCAP_MD5 + | ELF_SPARC_HWCAP_SHA1 + | ELF_SPARC_HWCAP_SHA256 + | ELF_SPARC_HWCAP_SHA512 + | ELF_SPARC_HWCAP_MPMUL + | ELF_SPARC_HWCAP_MONT + | ELF_SPARC_HWCAP_CRC32C + | ELF_SPARC_HWCAP_CBCOND + | ELF_SPARC_HWCAP_PAUSE); + unsigned int v9v_hwcaps_mask = (ELF_SPARC_HWCAP_FJFMAU + | ELF_SPARC_HWCAP_IMA); + unsigned int v9m_hwcaps2_mask = (ELF_SPARC_HWCAP2_SPARC5 + | ELF_SPARC_HWCAP2_MWAIT + | ELF_SPARC_HWCAP2_XMPMUL + | ELF_SPARC_HWCAP2_XMONT); + if (ABI_64_P (abfd)) { unsigned long mach = bfd_mach_sparc_v9; - if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US3) + if (hwcaps2->i & v9m_hwcaps2_mask) + mach = bfd_mach_sparc_v9m; + else if (hwcaps->i & v9v_hwcaps_mask) + mach = bfd_mach_sparc_v9v; + else if (hwcaps->i & v9e_hwcaps_mask) + mach = bfd_mach_sparc_v9e; + else if (hwcaps->i & v9d_hwcaps_mask) + mach = bfd_mach_sparc_v9d; + else if (hwcaps->i & v9c_hwcaps_mask) + mach = bfd_mach_sparc_v9c; + else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US3) mach = bfd_mach_sparc_v9b; else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US1) mach = bfd_mach_sparc_v9a; @@ -4846,7 +4883,22 @@ _bfd_sparc_elf_object_p (bfd *abfd) { if (elf_elfheader (abfd)->e_machine == EM_SPARC32PLUS) { - if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US3) + if (hwcaps2->i & v9m_hwcaps2_mask) + return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, + bfd_mach_sparc_v8plusm); + else if (hwcaps->i & v9v_hwcaps_mask) + return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, + bfd_mach_sparc_v8plusv); + else if (hwcaps->i & v9e_hwcaps_mask) + return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, + bfd_mach_sparc_v8pluse); + else if (hwcaps->i & v9d_hwcaps_mask) + return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, + bfd_mach_sparc_v8plusd); + else if (hwcaps->i & v9c_hwcaps_mask) + return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, + bfd_mach_sparc_v8plusc); + else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US3) return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, bfd_mach_sparc_v8plusb); else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US1) diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h index b3227ed..364bddf 100644 --- a/bfd/elfxx-target.h +++ b/bfd/elfxx-target.h @@ -123,6 +123,9 @@ #ifndef elf_backend_stack_align #define elf_backend_stack_align 16 #endif +#ifndef elf_backend_strtab_flags +#define elf_backend_strtab_flags 0 +#endif #define bfd_elfNN_bfd_debug_info_start bfd_void #define bfd_elfNN_bfd_debug_info_end bfd_void @@ -247,6 +250,10 @@ #ifndef bfd_elfNN_bfd_link_hash_table_create #define bfd_elfNN_bfd_link_hash_table_create _bfd_elf_link_hash_table_create #endif +#ifndef bfd_elfNN_bfd_copy_link_hash_symbol_type +#define bfd_elfNN_bfd_copy_link_hash_symbol_type \ + _bfd_elf_copy_link_hash_symbol_type +#endif #ifndef bfd_elfNN_bfd_link_add_symbols #define bfd_elfNN_bfd_link_add_symbols bfd_elf_link_add_symbols #endif @@ -263,6 +270,10 @@ #define bfd_elfNN_bfd_link_hash_table_create \ _bfd_generic_link_hash_table_create #endif +#ifndef bfd_elfNN_bfd_copy_link_hash_symbol_type +#define bfd_elfNN_bfd_copy_link_hash_symbol_type \ + _bfd_generic_copy_link_hash_symbol_type +#endif #ifndef bfd_elfNN_bfd_link_add_symbols #define bfd_elfNN_bfd_link_add_symbols _bfd_generic_link_add_symbols #endif @@ -275,15 +286,14 @@ #define bfd_elfNN_bfd_link_just_syms _bfd_elf_link_just_syms #endif -#ifndef bfd_elfNN_bfd_copy_link_hash_symbol_type -#define bfd_elfNN_bfd_copy_link_hash_symbol_type \ - _bfd_elf_copy_link_hash_symbol_type -#endif - #ifndef bfd_elfNN_bfd_link_split_section #define bfd_elfNN_bfd_link_split_section _bfd_generic_link_split_section #endif +#ifndef bfd_elfNN_bfd_link_check_relocs +#define bfd_elfNN_bfd_link_check_relocs _bfd_elf_link_check_relocs +#endif + #ifndef bfd_elfNN_archive_p #define bfd_elfNN_archive_p bfd_generic_archive_p #endif @@ -514,11 +524,14 @@ #ifndef elf_backend_output_arch_syms #define elf_backend_output_arch_syms NULL #endif +#ifndef elf_backend_filter_implib_symbols +#define elf_backend_filter_implib_symbols NULL +#endif #ifndef elf_backend_copy_indirect_symbol -#define elf_backend_copy_indirect_symbol _bfd_elf_link_hash_copy_indirect +#define elf_backend_copy_indirect_symbol _bfd_elf_link_hash_copy_indirect #endif #ifndef elf_backend_hide_symbol -#define elf_backend_hide_symbol _bfd_elf_link_hash_hide_symbol +#define elf_backend_hide_symbol _bfd_elf_link_hash_hide_symbol #endif #ifndef elf_backend_fixup_symbol #define elf_backend_fixup_symbol NULL @@ -679,6 +692,10 @@ #define elf_backend_get_reloc_section _bfd_elf_get_reloc_section #endif +#ifndef elf_backend_copy_special_section_fields +#define elf_backend_copy_special_section_fields NULL +#endif + #ifndef elf_backend_compact_eh_encoding #define elf_backend_compact_eh_encoding NULL #endif @@ -750,6 +767,7 @@ static struct elf_backend_data elfNN_bed = elf_backend_print_symbol_all, elf_backend_output_arch_local_syms, elf_backend_output_arch_syms, + elf_backend_filter_implib_symbols, elf_backend_copy_indirect_symbol, elf_backend_hide_symbol, elf_backend_fixup_symbol, @@ -786,6 +804,7 @@ static struct elf_backend_data elfNN_bed = elf_backend_is_function_type, elf_backend_maybe_function_sym, elf_backend_get_reloc_section, + elf_backend_copy_special_section_fields, elf_backend_link_order_error_handler, elf_backend_relplt_name, ELF_MACHINE_ALT1, @@ -804,6 +823,7 @@ static struct elf_backend_data elfNN_bed = elf_backend_cant_unwind_opcode, elf_backend_static_tls_alignment, elf_backend_stack_align, + elf_backend_strtab_flags, elf_backend_collect, elf_backend_type_change_ok, elf_backend_may_use_rel_p, @@ -850,7 +870,7 @@ const bfd_target TARGET_BIG_SYM = /* object_flags: mask of all file flags */ (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS - | BFD_COMPRESS_GABI), + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON), /* section_flags: mask of all section flags */ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY @@ -910,6 +930,8 @@ const bfd_target TARGET_BIG_SYM = BFD_JUMP_TABLE_CORE (bfd_elfNN), #ifdef bfd_elfNN_archive_functions BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive), +#elif defined USE_64_BIT_ARCHIVE + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_64_bit), #else BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), #endif @@ -949,7 +971,7 @@ const bfd_target TARGET_LITTLE_SYM = /* object_flags: mask of all file flags */ (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS - | BFD_COMPRESS_GABI), + | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON), /* section_flags: mask of all section flags */ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY @@ -1009,6 +1031,8 @@ const bfd_target TARGET_LITTLE_SYM = BFD_JUMP_TABLE_CORE (bfd_elfNN), #ifdef bfd_elfNN_archive_functions BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive), +#elif defined USE_64_BIT_ARCHIVE + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_64_bit), #else BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), #endif diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c index 3423bac..db266c1 100644 --- a/bfd/elfxx-tilegx.c +++ b/bfd/elfxx-tilegx.c @@ -4044,15 +4044,14 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, switch (r) { case bfd_reloc_overflow: - r = info->callbacks->reloc_overflow + (*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); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_outofrange: @@ -4073,11 +4072,8 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, } if (msg) - r = info->callbacks->warning - (info, msg, name, input_bfd, input_section, rel->r_offset); - - if (! r) - return FALSE; + (*info->callbacks->warning) (info, msg, name, input_bfd, + input_section, rel->r_offset); } } diff --git a/bfd/format.c b/bfd/format.c index aad4dc2..f34b1d4 100644 --- a/bfd/format.c +++ b/bfd/format.c @@ -203,6 +203,9 @@ bfd_boolean bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) { extern const bfd_target binary_vec; +#if BFD_SUPPORTS_PLUGINS + extern const bfd_target plugin_vec; +#endif const bfd_target * const *target; const bfd_target **matching_vector = NULL; const bfd_target *save_targ, *right_targ, *ar_right_targ, *match_targ; @@ -305,6 +308,16 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) temp = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); if (temp) { + int match_priority = temp->match_priority; +#if BFD_SUPPORTS_PLUGINS + /* If this object can be handled by a plugin, give that the + lowest priority; objects both handled by a plugin and + with an underlying object format will be claimed + separately by the plugin. */ + if (*target == &plugin_vec) + match_priority = (*target)->match_priority; +#endif + match_targ = temp; if (preserve.marker != NULL) bfd_preserve_finish (abfd, &preserve); @@ -326,9 +339,9 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) matching_vector[match_count] = temp; match_count++; - if (temp->match_priority < best_match) + if (match_priority < best_match) { - best_match = temp->match_priority; + best_match = match_priority; best_count = 0; } best_count++; diff --git a/bfd/i386msdos.c b/bfd/i386msdos.c index fd24e8b..7be9544 100644 --- a/bfd/i386msdos.c +++ b/bfd/i386msdos.c @@ -157,6 +157,7 @@ msdos_set_section_contents (bfd *abfd, #define msdos_bfd_final_link _bfd_generic_final_link #define msdos_bfd_link_split_section _bfd_generic_link_split_section #define msdos_set_arch_mach _bfd_generic_set_arch_mach +#define msdos_bfd_link_check_relocs _bfd_generic_link_check_relocs #define msdos_get_symtab_upper_bound _bfd_nosymbols_get_symtab_upper_bound #define msdos_canonicalize_symtab _bfd_nosymbols_canonicalize_symtab diff --git a/bfd/i386os9k.c b/bfd/i386os9k.c index 6bfe218..dc5624a 100644 --- a/bfd/i386os9k.c +++ b/bfd/i386os9k.c @@ -183,6 +183,7 @@ os9k_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, _bfd_generic_copy_link_hash_symbol_type #define os9k_bfd_final_link _bfd_generic_final_link #define os9k_bfd_link_split_section _bfd_generic_link_split_section +#define os9k_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target i386_aout_os9k_vec = { diff --git a/bfd/ieee.c b/bfd/ieee.c index f65f0f0..73b3f98 100644 --- a/bfd/ieee.c +++ b/bfd/ieee.c @@ -3863,6 +3863,7 @@ ieee_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, _bfd_generic_copy_link_hash_symbol_type #define ieee_bfd_final_link _bfd_generic_final_link #define ieee_bfd_link_split_section _bfd_generic_link_split_section +#define ieee_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target ieee_vec = { diff --git a/bfd/ihex.c b/bfd/ihex.c index ba3c087..27e197d 100644 --- a/bfd/ihex.c +++ b/bfd/ihex.c @@ -940,10 +940,10 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, #define ihex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define ihex_bfd_link_add_symbols _bfd_generic_link_add_symbols #define ihex_bfd_link_just_syms _bfd_generic_link_just_syms -#define ihex_bfd_copy_link_hash_symbol_type \ - _bfd_generic_copy_link_hash_symbol_type +#define ihex_bfd_copy_link_hash_symbol_type _bfd_generic_copy_link_hash_symbol_type #define ihex_bfd_final_link _bfd_generic_final_link #define ihex_bfd_link_split_section _bfd_generic_link_split_section +#define ihex_bfd_link_check_relocs _bfd_generic_link_check_relocs /* The Intel Hex target vector. */ diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h index 89d215b..cde3aad 100644 --- a/bfd/libbfd-in.h +++ b/bfd/libbfd-in.h @@ -28,15 +28,6 @@ extern "C" { #endif -/* Align an address upward to a boundary, expressed as a number of bytes. - E.g. align to an 8-byte boundary with argument of 8. Take care never - to wrap around if the address is within boundary-1 of the end of the - address space. */ -#define BFD_ALIGN(this, boundary) \ - ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \ - ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \ - : ~ (bfd_vma) 0) - /* If you want to read and write large blocks, you might want to do it in quanta of this amount */ #define DEFAULT_BUFFERSIZE 8192 @@ -149,6 +140,29 @@ bfd_boolean bfd_slurp_bsd_armap_f2 (bfd *abfd); #define bfd_slurp_bsd_armap bfd_slurp_armap #define bfd_slurp_coff_armap bfd_slurp_armap +bfd_boolean _bfd_archive_64_bit_slurp_armap + (bfd *); +bfd_boolean _bfd_archive_64_bit_write_armap + (bfd *, unsigned int, struct orl *, unsigned int, int); +#define _bfd_archive_64_bit_slurp_extended_name_table \ + _bfd_slurp_extended_name_table +#define _bfd_archive_64_bit_construct_extended_name_table \ + _bfd_archive_coff_construct_extended_name_table +#define _bfd_archive_64_bit_truncate_arname \ + bfd_dont_truncate_arname +#define _bfd_archive_64_bit_read_ar_hdr \ + _bfd_generic_read_ar_hdr +#define _bfd_archive_64_bit_write_ar_hdr \ + _bfd_generic_write_ar_hdr +#define _bfd_archive_64_bit_openr_next_archived_file \ + bfd_generic_openr_next_archived_file +#define _bfd_archive_64_bit_get_elt_at_index \ + _bfd_generic_get_elt_at_index +#define _bfd_archive_64_bit_generic_stat_arch_elt \ + bfd_generic_stat_arch_elt +#define _bfd_archive_64_bit_update_armap_timestamp \ + bfd_true + bfd_boolean _bfd_slurp_extended_name_table (bfd *abfd); extern bfd_boolean _bfd_construct_extended_name_table @@ -499,6 +513,8 @@ extern bfd_boolean _bfd_generic_set_section_contents #define _bfd_nolink_bfd_define_common_symbol \ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, \ struct bfd_link_hash_entry *)) bfd_false) +#define _bfd_nolink_bfd_link_check_relocs \ + _bfd_generic_link_check_relocs /* 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.h b/bfd/libbfd.h index d7183d3..9d751ee 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -33,15 +33,6 @@ extern "C" { #endif -/* Align an address upward to a boundary, expressed as a number of bytes. - E.g. align to an 8-byte boundary with argument of 8. Take care never - to wrap around if the address is within boundary-1 of the end of the - address space. */ -#define BFD_ALIGN(this, boundary) \ - ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \ - ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \ - : ~ (bfd_vma) 0) - /* If you want to read and write large blocks, you might want to do it in quanta of this amount */ #define DEFAULT_BUFFERSIZE 8192 @@ -154,6 +145,29 @@ bfd_boolean bfd_slurp_bsd_armap_f2 (bfd *abfd); #define bfd_slurp_bsd_armap bfd_slurp_armap #define bfd_slurp_coff_armap bfd_slurp_armap +bfd_boolean _bfd_archive_64_bit_slurp_armap + (bfd *); +bfd_boolean _bfd_archive_64_bit_write_armap + (bfd *, unsigned int, struct orl *, unsigned int, int); +#define _bfd_archive_64_bit_slurp_extended_name_table \ + _bfd_slurp_extended_name_table +#define _bfd_archive_64_bit_construct_extended_name_table \ + _bfd_archive_coff_construct_extended_name_table +#define _bfd_archive_64_bit_truncate_arname \ + bfd_dont_truncate_arname +#define _bfd_archive_64_bit_read_ar_hdr \ + _bfd_generic_read_ar_hdr +#define _bfd_archive_64_bit_write_ar_hdr \ + _bfd_generic_write_ar_hdr +#define _bfd_archive_64_bit_openr_next_archived_file \ + bfd_generic_openr_next_archived_file +#define _bfd_archive_64_bit_get_elt_at_index \ + _bfd_generic_get_elt_at_index +#define _bfd_archive_64_bit_generic_stat_arch_elt \ + bfd_generic_stat_arch_elt +#define _bfd_archive_64_bit_update_armap_timestamp \ + bfd_true + bfd_boolean _bfd_slurp_extended_name_table (bfd *abfd); extern bfd_boolean _bfd_construct_extended_name_table @@ -504,6 +518,8 @@ extern bfd_boolean _bfd_generic_set_section_contents #define _bfd_nolink_bfd_define_common_symbol \ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, \ struct bfd_link_hash_entry *)) bfd_false) +#define _bfd_nolink_bfd_link_check_relocs \ + _bfd_generic_link_check_relocs /* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not have dynamic symbols or relocs. Use BFD_JUMP_TABLE_DYNAMIC @@ -1131,6 +1147,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_MICROMIPS_7_PCREL_S1", "BFD_RELOC_MICROMIPS_10_PCREL_S1", "BFD_RELOC_MICROMIPS_16_PCREL_S1", + "BFD_RELOC_MIPS16_16_PCREL_S1", "BFD_RELOC_MIPS_21_PCREL_S2", "BFD_RELOC_MIPS_26_PCREL_S2", "BFD_RELOC_MIPS_18_PCREL_S3", @@ -1738,6 +1755,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_ARC_TLS_LE_32", "BFD_RELOC_ARC_S25W_PCREL_PLT", "BFD_RELOC_ARC_S21H_PCREL_PLT", + "BFD_RELOC_ARC_NPS_CMEM16", "BFD_RELOC_BFIN_16_IMM", "BFD_RELOC_BFIN_16_HIGH", "BFD_RELOC_BFIN_4_PCREL", @@ -2789,6 +2807,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL", "BFD_RELOC_MICROBLAZE_64_TLSTPREL", "BFD_RELOC_AARCH64_RELOC_START", + "BFD_RELOC_AARCH64_NULL", "BFD_RELOC_AARCH64_NONE", "BFD_RELOC_AARCH64_64", "BFD_RELOC_AARCH64_32", @@ -3129,9 +3148,6 @@ bfd_byte *bfd_generic_get_relocated_section_contents /* Extracted from archures.c. */ extern const bfd_arch_info_type bfd_default_arch_struct; -bfd_boolean bfd_default_set_arch_mach - (bfd *abfd, enum bfd_architecture arch, unsigned long mach); - const bfd_arch_info_type *bfd_default_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b); diff --git a/bfd/libecoff.h b/bfd/libecoff.h index 0d97c46..e0991ee 100644 --- a/bfd/libecoff.h +++ b/bfd/libecoff.h @@ -242,6 +242,7 @@ extern bfd_boolean _bfd_ecoff_get_section_contents (bfd *, asection *, void * location, file_ptr, bfd_size_type); #define _bfd_ecoff_bfd_link_split_section _bfd_generic_link_split_section +#define _bfd_ecoff_bfd_link_check_relocs _bfd_generic_link_check_relocs extern bfd_boolean _bfd_ecoff_bfd_copy_private_bfd_data (bfd *, bfd *); diff --git a/bfd/linker.c b/bfd/linker.c index 97b5d18..533eff8 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -1544,9 +1544,8 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, /* We have found a definition for a symbol which was previously common. */ BFD_ASSERT (h->type == bfd_link_hash_common); - if (! ((*info->callbacks->multiple_common) - (info, h, abfd, bfd_link_hash_defined, 0))) - return FALSE; + (*info->callbacks->multiple_common) (info, h, abfd, + bfd_link_hash_defined, 0); /* Fall through. */ case DEF: case DEFW: @@ -1603,10 +1602,9 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, if (oldtype == bfd_link_hash_defweak) abort (); - if (! ((*info->callbacks->constructor) - (info, c == 'I', - h->root.string, abfd, section, value))) - return FALSE; + (*info->callbacks->constructor) (info, c == 'I', + h->root.string, abfd, + section, value); } } } @@ -1675,9 +1673,8 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, already had a common definition. Use the maximum of the two sizes, and use the section required by the larger symbol. */ BFD_ASSERT (h->type == bfd_link_hash_common); - if (! ((*info->callbacks->multiple_common) - (info, h, abfd, bfd_link_hash_common, value))) - return FALSE; + (*info->callbacks->multiple_common) (info, h, abfd, + bfd_link_hash_common, value); if (value > h->u.c.size) { unsigned int power; @@ -1715,9 +1712,8 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, case CREF: /* We have found a common definition for a symbol which was already defined. */ - if (! ((*info->callbacks->multiple_common) - (info, h, abfd, bfd_link_hash_common, value))) - return FALSE; + (*info->callbacks->multiple_common) (info, h, abfd, + bfd_link_hash_common, value); break; case MIND: @@ -1728,17 +1724,15 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, /* Fall through. */ case MDEF: /* Handle a multiple definition. */ - if (! ((*info->callbacks->multiple_definition) - (info, h, abfd, section, value))) - return FALSE; + (*info->callbacks->multiple_definition) (info, h, + abfd, section, value); break; case CIND: /* Create an indirect symbol from an existing common symbol. */ BFD_ASSERT (h->type == bfd_link_hash_common); - if (! ((*info->callbacks->multiple_common) - (info, h, abfd, bfd_link_hash_indirect, 0))) - return FALSE; + (*info->callbacks->multiple_common) (info, h, abfd, + bfd_link_hash_indirect, 0); /* Fall through. */ case IND: if (inh->type == bfd_link_hash_indirect @@ -1779,9 +1773,8 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, case SET: /* Add an entry to a set. */ - if (! (*info->callbacks->add_to_set) (info, h, BFD_RELOC_CTOR, - abfd, section, value)) - return FALSE; + (*info->callbacks->add_to_set) (info, h, BFD_RELOC_CTOR, + abfd, section, value); break; case WARNC: @@ -1790,10 +1783,8 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, if (h->u.i.warning != NULL && (abfd->flags & BFD_PLUGIN) == 0) { - if (! (*info->callbacks->warning) (info, h->u.i.warning, - h->root.string, abfd, - NULL, 0)) - return FALSE; + (*info->callbacks->warning) (info, h->u.i.warning, + h->root.string, abfd, NULL, 0); /* Only issue a warning once. */ h->u.i.warning = NULL; } @@ -1819,9 +1810,8 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, && (h->u.undef.next != NULL || info->hash->undefs_tail == h)) || h->non_ir_ref) { - if (! (*info->callbacks->warning) (info, string, h->root.string, - hash_entry_bfd (h), NULL, 0)) - return FALSE; + (*info->callbacks->warning) (info, string, h->root.string, + hash_entry_bfd (h), NULL, 0); break; } /* Fall through. */ @@ -2412,9 +2402,8 @@ _bfd_generic_reloc_link_order (bfd *abfd, if (h == NULL || ! h->written) { - if (! ((*info->callbacks->unattached_reloc) - (info, link_order->u.reloc.p->u.name, NULL, NULL, 0))) - return FALSE; + (*info->callbacks->unattached_reloc) + (info, link_order->u.reloc.p->u.name, NULL, NULL, 0); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -2448,17 +2437,13 @@ _bfd_generic_reloc_link_order (bfd *abfd, case bfd_reloc_outofrange: abort (); case bfd_reloc_overflow: - if (! ((*info->callbacks->reloc_overflow) - (info, NULL, - (link_order->type == bfd_section_reloc_link_order - ? bfd_section_name (abfd, link_order->u.reloc.p->u.section) - : link_order->u.reloc.p->u.name), - r->howto->name, link_order->u.reloc.p->addend, - NULL, NULL, 0))) - { - free (buf); - return FALSE; - } + (*info->callbacks->reloc_overflow) + (info, NULL, + (link_order->type == bfd_section_reloc_link_order + ? bfd_section_name (abfd, link_order->u.reloc.p->u.section) + : link_order->u.reloc.p->u.name), + r->howto->name, link_order->u.reloc.p->addend, + NULL, NULL, 0); break; } loc = link_order->offset * bfd_octets_per_byte (abfd); @@ -3304,3 +3289,46 @@ bfd_hide_sym_by_version (struct bfd_elf_version_tree *verdefs, bfd_find_version_for_sym (verdefs, sym_name, &hidden); return hidden; } + +/* +FUNCTION + bfd_link_check_relocs + +SYNOPSIS + bfd_boolean bfd_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); + +DESCRIPTION + Checks the relocs in ABFD for validity. + Does not execute the relocs. + Return TRUE if everything is OK, FALSE otherwise. + This is the external entry point to this code. +*/ + +bfd_boolean +bfd_link_check_relocs (bfd *abfd, struct bfd_link_info *info) +{ + return BFD_SEND (abfd, _bfd_link_check_relocs, (abfd, info)); +} + +/* +FUNCTION + _bfd_generic_link_check_relocs + +SYNOPSIS + bfd_boolean _bfd_generic_link_check_relocs + (bfd *abfd, struct bfd_link_info *info); + +DESCRIPTION + Stub function for targets that do not implement reloc checking. + Return TRUE. + This is an internal function. It should not be called from + outside the BFD library. +*/ + +bfd_boolean +_bfd_generic_link_check_relocs (bfd *abfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info ATTRIBUTE_UNUSED) +{ + return TRUE; +} diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c index bf956fd..6b615ed 100644 --- a/bfd/mach-o-target.c +++ b/bfd/mach-o-target.c @@ -44,6 +44,7 @@ _bfd_generic_copy_link_hash_symbol_type #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_bfd_link_check_relocs _bfd_generic_link_check_relocs #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_mach_o_bfd_set_private_flags #define bfd_mach_o_get_section_contents _bfd_generic_get_section_contents diff --git a/bfd/mach-o.c b/bfd/mach-o.c index 85ce857..1609980 100644 --- a/bfd/mach-o.c +++ b/bfd/mach-o.c @@ -5708,7 +5708,7 @@ bfd_mach_o_follow_dsym (bfd *abfd) if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_mach_o_flavour) return NULL; - if (abfd->my_archive) + if (abfd->my_archive && !bfd_is_thin_archive (abfd->my_archive)) base_bfd = abfd->my_archive; /* BFD may have been opened from a stream. */ if (base_bfd->filename == NULL) diff --git a/bfd/mmo.c b/bfd/mmo.c index d396fd7..dbfc9ac 100644 --- a/bfd/mmo.c +++ b/bfd/mmo.c @@ -2120,7 +2120,7 @@ mmo_get_section_contents (bfd *abfd ATTRIBUTE_UNUSED, memcpy (location, loc, chunk_size); - location += chunk_size; + location = (bfd_byte *) location + chunk_size; bytes_to_do -= chunk_size; offset += chunk_size; } @@ -2657,7 +2657,7 @@ mmo_set_section_contents (bfd *abfd ATTRIBUTE_UNUSED, sec_ptr sec, memcpy (loc, location, chunk_size); - location += chunk_size; + location = (bfd_byte *) location + chunk_size; bytes_to_do -= chunk_size; offset += chunk_size; } @@ -3278,6 +3278,7 @@ mmo_write_object_contents (bfd *abfd) _bfd_generic_copy_link_hash_symbol_type #define mmo_bfd_final_link _bfd_generic_final_link #define mmo_bfd_link_split_section _bfd_generic_link_split_section +#define mmo_bfd_link_check_relocs _bfd_generic_link_check_relocs /* Strictly speaking, only MMIX uses this restricted format, but let's not stop anybody from shooting themselves in the foot. */ diff --git a/bfd/nlm-target.h b/bfd/nlm-target.h index 082e856..6ed0b5c 100644 --- a/bfd/nlm-target.h +++ b/bfd/nlm-target.h @@ -59,6 +59,7 @@ _bfd_generic_copy_link_hash_symbol_type #define nlm_bfd_final_link _bfd_generic_final_link #define nlm_bfd_link_split_section _bfd_generic_link_split_section +#define nlm_bfd_link_check_relocs _bfd_generic_link_check_relocs /* This structure contains everything that BFD knows about a target. It includes things like its byte order, name, what routines to call diff --git a/bfd/oasys.c b/bfd/oasys.c index f7791d2..31555e0 100644 --- a/bfd/oasys.c +++ b/bfd/oasys.c @@ -1192,6 +1192,7 @@ oasys_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, _bfd_generic_copy_link_hash_symbol_type #define oasys_bfd_final_link _bfd_generic_final_link #define oasys_bfd_link_split_section _bfd_generic_link_split_section +#define oasys_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target oasys_vec = { diff --git a/bfd/pdp11.c b/bfd/pdp11.c index bf0cfc3..74617fc 100644 --- a/bfd/pdp11.c +++ b/bfd/pdp11.c @@ -2608,7 +2608,7 @@ aout_link_check_ar_symbols (bfd *abfd, However, it might be correct. */ if (!(*info->callbacks ->add_archive_element) (info, abfd, name, subsbfd)) - return FALSE; + continue; *pneeded = TRUE; return TRUE; } @@ -3070,9 +3070,8 @@ aout_link_reloc_link_order (struct aout_final_link_info *flaginfo, } else { - if (! ((*flaginfo->info->callbacks->unattached_reloc) - (flaginfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0))) - return FALSE; + (*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0); r_index = 0; } } @@ -3167,18 +3166,14 @@ aout_link_reloc_link_order (struct aout_final_link_info *flaginfo, case bfd_reloc_outofrange: abort (); case bfd_reloc_overflow: - if (! ((*flaginfo->info->callbacks->reloc_overflow) - (flaginfo->info, NULL, - (p->type == bfd_section_reloc_link_order - ? bfd_section_name (flaginfo->output_bfd, - pr->u.section) - : pr->u.name), - howto->name, pr->addend, NULL, - (asection *) NULL, (bfd_vma) 0))) - { - free (buf); - return FALSE; - } + (*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, NULL, + (p->type == bfd_section_reloc_link_order + ? bfd_section_name (flaginfo->output_bfd, + pr->u.section) + : pr->u.name), + howto->name, pr->addend, NULL, + (asection *) NULL, (bfd_vma) 0); break; } ok = bfd_set_section_contents (flaginfo->output_bfd, o, @@ -3355,10 +3350,9 @@ pdp11_aout_link_input_section (struct aout_final_link_info *flaginfo, name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*flaginfo->info->callbacks->unattached_reloc) - (flaginfo->info, name, input_bfd, input_section, - r_addr))) - return FALSE; + (*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, name, input_bfd, input_section, + r_addr); r_index = 0; } } @@ -3469,10 +3463,9 @@ pdp11_aout_link_input_section (struct aout_final_link_info *flaginfo, name = h->root.root.string; else name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*flaginfo->info->callbacks->undefined_symbol) - (flaginfo->info, name, input_bfd, input_section, - r_addr, TRUE))) - return FALSE; + (*flaginfo->info->callbacks->undefined_symbol) + (flaginfo->info, name, input_bfd, input_section, + r_addr, TRUE); } r = MY_final_link_relocate (howto, @@ -3504,11 +3497,9 @@ pdp11_aout_link_input_section (struct aout_final_link_info *flaginfo, s = aout_reloc_type_to_section (input_bfd, r_type); name = bfd_section_name (input_bfd, s); } - if (! ((*flaginfo->info->callbacks->reloc_overflow) - (flaginfo->info, (h ? &h->root : NULL), name, - howto->name, (bfd_vma) 0, input_bfd, - input_section, r_addr))) - return FALSE; + (*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, r_addr); } break; } diff --git a/bfd/pe-mips.c b/bfd/pe-mips.c index 53a5983..1dd8587 100644 --- a/bfd/pe-mips.c +++ b/bfd/pe-mips.c @@ -702,12 +702,9 @@ coff_pe_mips_relocate_section (bfd *output_bfd, } else if (! bfd_link_relocatable (info)) - { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - } + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); } src = rel->r_vaddr + input_section->output_section->vma diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index b80f981..c92c1ea 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -62,6 +62,7 @@ #include "libbfd.h" #include "coff/internal.h" #include "bfdver.h" +#include "libiberty.h" #ifdef HAVE_WCHAR_H #include #endif @@ -1195,13 +1196,15 @@ _bfd_XXi_slurp_codeview_record (bfd * abfd, file_ptr where, unsigned long length unsigned int _bfd_XXi_write_codeview_record (bfd * abfd, file_ptr where, CODEVIEW_INFO *cvinfo) { - unsigned int size = sizeof (CV_INFO_PDB70) + 1; + const bfd_size_type size = sizeof (CV_INFO_PDB70) + 1; + bfd_size_type written; CV_INFO_PDB70 *cvinfo70; - char buffer[size]; + char * buffer; if (bfd_seek (abfd, where, SEEK_SET) != 0) return 0; + buffer = xmalloc (size); cvinfo70 = (CV_INFO_PDB70 *) buffer; H_PUT_32 (abfd, CVINFO_PDB70_CVSIGNATURE, cvinfo70->CvSignature); @@ -1215,10 +1218,11 @@ _bfd_XXi_write_codeview_record (bfd * abfd, file_ptr where, CODEVIEW_INFO *cvinf H_PUT_32 (abfd, cvinfo->Age, cvinfo70->Age); cvinfo70->PdbFileName[0] = '\0'; - if (bfd_bwrite (buffer, size, abfd) != size) - return 0; + written = bfd_bwrite (buffer, size, abfd); + + free (buffer); - return size; + return written == size ? size : 0; } static char * dir_names[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] = diff --git a/bfd/pef.c b/bfd/pef.c index b08202d..30c3179 100644 --- a/bfd/pef.c +++ b/bfd/pef.c @@ -67,6 +67,7 @@ #define bfd_pef_bfd_final_link _bfd_generic_final_link #define bfd_pef_bfd_link_split_section _bfd_generic_link_split_section #define bfd_pef_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define bfd_pef_bfd_link_check_relocs _bfd_generic_link_check_relocs static int bfd_pef_parse_traceback_table (bfd *abfd, @@ -217,7 +218,7 @@ bfd_pef_print_symbol (bfd *abfd, fprintf (file, " %-5s %s", symbol->section->name, symbol->name); if (CONST_STRNEQ (symbol->name, "__traceback_")) { - unsigned char *buf = alloca (symbol->udata.i); + unsigned char *buf = xmalloc (symbol->udata.i); size_t offset = symbol->value + 4; size_t len = symbol->udata.i; int ret; @@ -227,6 +228,7 @@ bfd_pef_print_symbol (bfd *abfd, len, 0, NULL, file); if (ret < 0) fprintf (file, " [ERROR]"); + free (buf); } } } diff --git a/bfd/pei-x86_64.c b/bfd/pei-x86_64.c index aa90b6f..c19b946 100644 --- a/bfd/pei-x86_64.c +++ b/bfd/pei-x86_64.c @@ -602,7 +602,7 @@ pex64_bfd_print_pdata_section (bfd *abfd, void *vfile, asection *pdata_section) if (strcmp (pdata_section->name, ".pdata") != 0) { size_t len = strlen (pdata_section->name); - char *xdata_name = alloca (len + 1); + char *xdata_name = xmalloc (len + 1); xdata_name = memcpy (xdata_name, pdata_section->name, len + 1); /* Transform .pdata prefix into .xdata prefix. */ @@ -610,6 +610,7 @@ pex64_bfd_print_pdata_section (bfd *abfd, void *vfile, asection *pdata_section) xdata_name [1] = 'x'; xdata_section = pex64_get_section_by_rva (abfd, xdata_base, xdata_name); + free (xdata_name); } /* Second, try the .xdata section itself. */ if (!xdata_section) diff --git a/bfd/plugin.c b/bfd/plugin.c index b832e23..3931d27 100644 --- a/bfd/plugin.c +++ b/bfd/plugin.c @@ -106,6 +106,7 @@ dlerror (void) #define bfd_plugin_section_already_linked _bfd_generic_section_already_linked #define bfd_plugin_bfd_define_common_symbol bfd_generic_define_common_symbol #define bfd_plugin_bfd_copy_link_hash_symbol_type _bfd_generic_copy_link_hash_symbol_type +#define bfd_plugin_bfd_link_check_relocs _bfd_generic_link_check_relocs static enum ld_plugin_status message (int level ATTRIBUTE_UNUSED, @@ -157,57 +158,57 @@ bfd_plugin_set_program_name (const char *program_name) plugin_program_name = program_name; } -static int -try_claim (bfd *abfd) +int +bfd_plugin_open_input (bfd *ibfd, struct ld_plugin_input_file *file) { - int claimed = 0; - struct ld_plugin_input_file file; bfd *iobfd; - file.name = abfd->filename; - - if (abfd->my_archive) - { - iobfd = abfd->my_archive; - file.offset = abfd->origin; - file.filesize = arelt_size (abfd); - } - else - { - iobfd = abfd; - file.offset = 0; - file.filesize = 0; - } + iobfd = ibfd; + if (ibfd->my_archive && !bfd_is_thin_archive (ibfd->my_archive)) + iobfd = ibfd->my_archive; + file->name = iobfd->filename; if (!iobfd->iostream && !bfd_open_file (iobfd)) return 0; - file.fd = fileno ((FILE *) iobfd->iostream); + file->fd = fileno ((FILE *) iobfd->iostream); - if (!abfd->my_archive) + if (iobfd == ibfd) { struct stat stat_buf; - if (fstat (file.fd, &stat_buf)) + if (fstat (file->fd, &stat_buf)) return 0; - file.filesize = stat_buf.st_size; + file->offset = 0; + file->filesize = stat_buf.st_size; + } + else + { + file->offset = ibfd->origin; + file->filesize = arelt_size (ibfd); } + return 1; +} +static int +try_claim (bfd *abfd) +{ + int claimed = 0; + struct ld_plugin_input_file file; + + if (!bfd_plugin_open_input (abfd, &file)) + return 0; file.handle = abfd; - off_t cur_offset = lseek(file.fd, 0, SEEK_CUR); + off_t cur_offset = lseek (file.fd, 0, SEEK_CUR); claim_file (&file, &claimed); - lseek(file.fd, cur_offset, SEEK_SET); - if (!claimed) - return 0; - - return 1; + lseek (file.fd, cur_offset, SEEK_SET); + return claimed; } static int try_load_plugin (const char *pname, bfd *abfd, int *has_plugin_p) { void *plugin_handle; - int tv_size = 4; - struct ld_plugin_tv tv[tv_size]; + struct ld_plugin_tv tv[4]; int i; ld_plugin_onload onload; enum ld_plugin_status status; @@ -287,6 +288,16 @@ bfd_plugin_specified_p (void) return has_plugin > 0; } +/* Return TRUE if ABFD can be claimed by linker LTO plugin. */ + +bfd_boolean +bfd_link_plugin_object_p (bfd *abfd) +{ + if (ld_plugin_object_p) + return ld_plugin_object_p (abfd) != NULL; + return FALSE; +} + extern const bfd_target plugin_vec; /* Return TRUE if TARGET is a pointer to plugin_vec. */ @@ -365,7 +376,7 @@ bfd_plugin_object_p (bfd *abfd) if (ld_plugin_object_p) return ld_plugin_object_p (abfd); - if (abfd->plugin_format == bfd_plugin_uknown && !load_plugin (abfd)) + if (abfd->plugin_format == bfd_plugin_unknown && !load_plugin (abfd)) return NULL; return abfd->plugin_format == bfd_plugin_yes ? abfd->xvec : NULL; @@ -566,7 +577,7 @@ const bfd_target plugin_vec = 0, /* symbol_leading_char. */ '/', /* ar_pad_char. */ 15, /* ar_max_namelen. */ - 0, /* match priority. */ + 255, /* match priority. */ bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, @@ -597,7 +608,11 @@ const bfd_target plugin_vec = BFD_JUMP_TABLE_GENERIC (bfd_plugin), BFD_JUMP_TABLE_COPY (bfd_plugin), BFD_JUMP_TABLE_CORE (bfd_plugin), +#ifdef USE_64_BIT_ARCHIVE + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_64_bit), +#else BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), +#endif BFD_JUMP_TABLE_SYMBOLS (bfd_plugin), BFD_JUMP_TABLE_RELOCS (_bfd_norelocs), BFD_JUMP_TABLE_WRITE (bfd_plugin), diff --git a/bfd/plugin.h b/bfd/plugin.h index 0ad92fc..0867122 100644 --- a/bfd/plugin.h +++ b/bfd/plugin.h @@ -21,12 +21,12 @@ #ifndef _PLUGIN_H_ #define _PLUGIN_H_ -#include "bfd.h" - void bfd_plugin_set_program_name (const char *); +int bfd_plugin_open_input (bfd *, struct ld_plugin_input_file *); void bfd_plugin_set_plugin (const char *); bfd_boolean bfd_plugin_target_p (const bfd_target *); bfd_boolean bfd_plugin_specified_p (void); +bfd_boolean bfd_link_plugin_object_p (bfd *); void register_ld_plugin_object_p (const bfd_target *(*object_p) (bfd *)); typedef struct plugin_data_struct diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in index f12ad70..a74faad 100644 --- a/bfd/po/SRC-POTFILES.in +++ b/bfd/po/SRC-POTFILES.in @@ -307,6 +307,7 @@ mach-o.h merge.c mipsbsd.c mmo.c +netbsd-core.c netbsd.h newsos3.c nlm-target.h diff --git a/bfd/po/sr.gmo b/bfd/po/sr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..5734100128e82949f0362733e7b2cb7bea792b91 GIT binary patch literal 202462 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%0DqWgj;~*~2%m18lLx^oBx>+ajoS@Ji1ua9`wy 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 z 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, 2016. +msgid "" +msgstr "" +"Project-Id-Version: bfd-2.24.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2014-02-10 09:42+1030\n" +"PO-Revision-Date: 2016-05-29 17:48+0200\n" +"Last-Translator: Мирослав Николић \n" +"Language-Team: Serbian <(nothing)>\n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\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:200 +#, c-format +msgid "%s: Invalid relocation type exported: %d" +msgstr "%s: Извезена је неисправна врста премештања: %d" + +#: aout-cris.c:243 +msgid "%B: Invalid relocation type imported: %d" +msgstr "%B: Увезена је неисправна врста премештања: %d" + +#: aout-cris.c:254 +msgid "%B: Bad relocation record imported: %d" +msgstr "%B: Увезен је лош снимак премештања: %d" + +#: aoutx.h:1273 aoutx.h:1611 +#, c-format +msgid "%s: can not represent section `%s' in a.out object file format" +msgstr "%s: не могу да представим одељак „%s“ у „a.out“ запису датотеке објекта" + +#: aoutx.h:1577 +#, c-format +msgid "%s: can not represent section for symbol `%s' in a.out object file format" +msgstr "%s: не могу да представим одељак за симбол „%s“ у „a.out“ запису датотеке објекта" + +#: aoutx.h:1579 vms-alpha.c:7564 +msgid "*unknown*" +msgstr "*непознато*" + +#: aoutx.h:4018 aoutx.h:4344 +msgid "%P: %B: unexpected relocation type\n" +msgstr "%P: %B: неочекивана врста премештања\n" + +#: aoutx.h:5375 +#, c-format +msgid "%s: relocatable link from %s to %s not supported" +msgstr "%s: преместива веза са „%s“ на „%s“ није подржана" + +#: archive.c:2249 +msgid "Warning: writing archive was slow: rewriting timestamp\n" +msgstr "Упозорење: упис у архиву је спор: поново уписујем време\n" + +#: archive.c:2549 +msgid "Reading archive file mod timestamp" +msgstr "Читам време режима датотеке архиве" + +#: archive.c:2573 +msgid "Writing updated armap timestamp" +msgstr "Уписујем освежено време армапа" + +#: bfd.c:411 +msgid "No error" +msgstr "Нема грешке" + +#: bfd.c:412 +msgid "System call error" +msgstr "Грешка системског позива" + +#: bfd.c:413 +msgid "Invalid bfd target" +msgstr "Неисправан циљ бфд-а" + +#: bfd.c:414 +msgid "File in wrong format" +msgstr "Датотека је у погрешном запису" + +#: bfd.c:415 +msgid "Archive object file in wrong format" +msgstr "Датотека објекта архиве је у погрешном запису" + +#: bfd.c:416 +msgid "Invalid operation" +msgstr "Неисправна операција" + +#: bfd.c:417 +msgid "Memory exhausted" +msgstr "Меморија је исцрпљена" + +#: bfd.c:418 +msgid "No symbols" +msgstr "Нема симбола" + +#: bfd.c:419 +msgid "Archive has no index; run ranlib to add one" +msgstr "Архива нема индекс; покрените „ranlib“ да га додате" + +#: bfd.c:420 +msgid "No more archived files" +msgstr "Нема више архивираних датотека" + +#: bfd.c:421 +msgid "Malformed archive" +msgstr "Лоша архива" + +#: bfd.c:422 +msgid "DSO missing from command line" +msgstr "ДСО недостаје на линији наредби" + +#: bfd.c:423 +msgid "File format not recognized" +msgstr "Запис датотеке није препознат" + +#: bfd.c:424 +msgid "File format is ambiguous" +msgstr "Запис датотеке је нејасан" + +#: bfd.c:425 +msgid "Section has no contents" +msgstr "Одељак нема садржаје" + +#: bfd.c:426 +msgid "Nonrepresentable section on output" +msgstr "На излазу је одељак који се не може приказати" + +#: bfd.c:427 +msgid "Symbol needs debug section which does not exist" +msgstr "Симболу је потребан одељак за уклањање грешака који не постоји" + +#: bfd.c:428 +msgid "Bad value" +msgstr "Погрешна вредност" + +#: bfd.c:429 +msgid "File truncated" +msgstr "Датотека је окрњена" + +#: bfd.c:430 +msgid "File too big" +msgstr "Датотека је превелика" + +#: bfd.c:431 +#, c-format +msgid "Error reading %s: %s" +msgstr "Грешка читања „%s“: %s" + +#: bfd.c:432 +msgid "#" +msgstr "#<Неисправан код грешке>" + +#: bfd.c:1046 +#, c-format +msgid "BFD %s assertion fail %s:%d" +msgstr "„BFD“ „%s“ тврдња није успела „%s“:%d" + +#: bfd.c:1058 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d in %s\n" +msgstr "Унутрашња грешка БФД-а %s, прекидам при „%s“ %d. реду у „%s“\n" + +#: bfd.c:1062 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d\n" +msgstr "Унутрашња грешка БФД-а %s, прекидам при „%s“ %d. реду\n" + +#: bfd.c:1064 +msgid "Please report this bug.\n" +msgstr "Пријавите ову грешку.\n" + +#: bfdwin.c:206 +#, c-format +msgid "not mapping: data=%lx mapped=%d\n" +msgstr "не мапирам: податак=%lx мапиран=%d\n" + +#: bfdwin.c:209 +#, c-format +msgid "not mapping: env var not set\n" +msgstr "не мапирам: променљива окружења није постављена\n" + +#: binary.c:271 +#, c-format +msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." +msgstr "Упозорење: Упис одељка „%s“ има превелик (нпр. негативан) померај датотеке 0x%lx." + +#: bout.c:1146 elf-m10300.c:2665 elf32-avr.c:1706 elf32-frv.c:5641 +#: elf64-ia64-vms.c:354 elfxx-sparc.c:2869 reloc.c:7324 reloc16.c:160 +#: elf32-ia64.c:351 elf64-ia64.c:351 +msgid "%P%F: --relax and -r may not be used together\n" +msgstr "%P%F: „--relax“ и „-r“ се не могу користити заједно\n" + +#: cache.c:253 +msgid "reopening %B: %s\n" +msgstr "поново отварам „%B“: %s\n" + +#: coff-alpha.c:452 +msgid "" +"%B: Cannot handle compressed Alpha binaries.\n" +" Use compiler flags, or objZ, to generate uncompressed binaries." +msgstr "" +"%B: Не могу да радим са сажетим бинарним Алфа датотекама.\n" +" Користите заставице преводиоца, или „objZ“, да створите несажете бинарне датотеке." + +#: coff-alpha.c:603 +msgid "%B: unknown/unsupported relocation type %d" +msgstr "%B: непозната/неподржана врста премештања „%d“" + +#: coff-alpha.c:852 coff-alpha.c:889 coff-alpha.c:1973 coff-mips.c:946 +msgid "GP relative relocation used when GP not defined" +msgstr "Употребљено је релативно премештање општег показивача када није дефинисан" + +#: coff-alpha.c:1450 +msgid "using multiple gp values" +msgstr "користим неколико вредности општег показивача" + +#: coff-alpha.c:1509 +msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" +msgstr "%B: неподржано премештање: „ALPHA_R_GRELHIGH“" + +#: coff-alpha.c:1516 +msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" +msgstr "%B: неподржано премештање: „ALPHA_R_GRELLOW“" + +#: coff-alpha.c:1523 elf32-m32r.c:2443 elf64-alpha.c:4083 elf64-alpha.c:4233 +#: elf64-ia64-vms.c:3429 elf32-ia64.c:3836 elf64-ia64.c:3836 +msgid "%B: unknown relocation type %d" +msgstr "%B: непозната врста премештања „%d“" + +#: coff-arm.c:1034 +#, c-format +msgid "%B: unable to find THUMB glue '%s' for `%s'" +msgstr "%B: не могу да пронађем „THUMB“ лепак „%s“ за „%s“" + +#: coff-arm.c:1063 +#, c-format +msgid "%B: unable to find ARM glue '%s' for `%s'" +msgstr "%B: не могу да пронађем „ARM“ лепак „%s“ за „%s“" + +#: coff-arm.c:1365 elf32-arm.c:7141 +#, 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:1455 +#, 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:1750 coff-tic80.c:673 cofflink.c:3168 +msgid "%B: bad reloc address 0x%lx in section `%A'" +msgstr "%B: погрешна адреса премештања 0x%lx у одељку „%A“" + +#: coff-arm.c:2075 +msgid "%B: illegal symbol index in reloc: %d" +msgstr "%B: недозвољен индекс симбола у премештању: %d" + +#: coff-arm.c:2206 +#, c-format +msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgstr "грешка: „%B“ је преведен за АПЦС-%d, док је „%B“ преведен за АПЦС-%d" + +#: coff-arm.c:2222 elf32-arm.c:16123 +#, c-format +msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers" +msgstr "грешка: „%B“ прослеђује децималне вредности у регистре децималних, док их „%B“ прослеђује у регистре целих вредности" + +#: coff-arm.c:2225 elf32-arm.c:16127 +#, c-format +msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers" +msgstr "грешка: „%B“ прослеђује децималне вредности у регистре целих, док их „%B“ прослеђује у регистре децималних вредности" + +#: coff-arm.c:2239 +#, c-format +msgid "error: %B is compiled as position independent code, whereas target %B is absolute position" +msgstr "грешка: „%B“ је преведен као код независан од положаја, док је циљ „%B“ апсолутни положај" + +#: coff-arm.c:2242 +#, c-format +msgid "error: %B is compiled as absolute position code, whereas target %B is position independent" +msgstr "грешка: „%B“ је преведен као код апсолутног положаја, док је циљ „%B“ независтан од положаја" + +#: coff-arm.c:2270 elf32-arm.c:16192 +#, c-format +msgid "Warning: %B supports interworking, whereas %B does not" +msgstr "УПОЗОРЕЊЕ: „%B“ подржава међудејство, док га „%B“ не подржава" + +#: coff-arm.c:2273 elf32-arm.c:16198 +#, c-format +msgid "Warning: %B does not support interworking, whereas %B does" +msgstr "УПОЗОРЕЊЕ: „%B“ не подржава међудејство, док га „%B“ подржава" + +#: coff-arm.c:2297 +#, c-format +msgid "private flags = %x:" +msgstr "приватне заставице =%x:" + +#: coff-arm.c:2305 elf32-arm.c:12119 +#, c-format +msgid " [floats passed in float registers]" +msgstr " [децималне вредности су прослеђене у регистре децималних вредности]" + +#: coff-arm.c:2307 +#, c-format +msgid " [floats passed in integer registers]" +msgstr " [децималне вредности су прослеђене у регистре целих вредности]" + +#: coff-arm.c:2310 elf32-arm.c:12122 +#, c-format +msgid " [position independent]" +msgstr " [независтан од положаја]" + +#: coff-arm.c:2312 +#, c-format +msgid " [absolute position]" +msgstr " [апсолутни положај]" + +#: coff-arm.c:2316 +#, c-format +msgid " [interworking flag not initialised]" +msgstr " [заставица међудејства није покренута]" + +#: coff-arm.c:2318 +#, c-format +msgid " [interworking supported]" +msgstr " [међудејство је подржано]" + +#: coff-arm.c:2320 +#, c-format +msgid " [interworking not supported]" +msgstr " [међудејство није подржано]" + +#: coff-arm.c:2366 elf32-arm.c:11104 +#, c-format +msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" +msgstr "Упозорење: Нисам подесио заставицу међудејства за „%B“ пошто је већ наведен као немеђудејствено" + +#: coff-arm.c:2370 elf32-arm.c:11108 +#, c-format +msgid "Warning: Clearing the interworking flag of %B due to outside request" +msgstr "Упозорење: Уклањам заставицу међудејства за „%B“ услед захтева споља" + +#: coff-h8300.c:1096 +#, 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" +msgstr "премештање „%s“ још није примењено" + +#: coff-i860.c:605 coff-tic54x.c:365 coffcode.h:5209 +msgid "%B: warning: illegal symbol index %ld in relocs" +msgstr "%B: упозорење: неисправан индекс симбола %ld у премештањима" + +#: coff-i960.c:124 coff-i960.c:480 +msgid "uncertain calling convention for non-COFF symbol" +msgstr "несигуран договор позива за не-„COFF“ симбол" + +#: coff-m68k.c:484 elf32-bfin.c:5556 elf32-cr16.c:2853 elf32-m68k.c:4632 +msgid "unsupported reloc type" +msgstr "неподржана врста премештања" + +#: coff-mips.c:636 elf32-mips.c:1637 elf32-score.c:431 elf32-score7.c:330 +#: elf64-mips.c:2925 elfn32-mips.c:2737 +msgid "GP relative relocation when _gp not defined" +msgstr "Релативно ГП премештање када „_gp“ није дефинисано" + +#: coff-or32.c:216 +msgid "Unrecognized reloc" +msgstr "Непознато премештање" + +#: coff-rs6000.c:2802 +#, c-format +msgid "%s: unsupported relocation type 0x%02x" +msgstr "%s: неподржана врста премештања 0x%02x" + +#: coff-rs6000.c:2887 +#, c-format +msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" +msgstr "%s: премештање табеле садржаја на 0x%x за симбол „%s“ који не садржи никакав унос" + +#: coff-rs6000.c:3638 coff64-rs6000.c:2117 +msgid "%B: symbol `%s' has unrecognized smclas %d" +msgstr "%B: симбол „%s“ има непознату класу симбола „%d“" + +#: coff-sh.c:506 +#, c-format +msgid "SH Error: unknown reloc type %d" +msgstr "Грешка шкољке: непозната врста премештања „%d“" + +#: coff-tic4x.c:184 coff-tic54x.c:279 coff-tic80.c:440 +#, c-format +msgid "Unrecognized reloc type 0x%x" +msgstr "Непозната врста премештања 0x%x" + +#: coff-tic4x.c:227 +#, c-format +msgid "%s: warning: illegal symbol index %ld in relocs" +msgstr "%s: упозорење: неисправан индекс симбола %ld у премештањима" + +#: coff-w65.c:355 +#, c-format +msgid "ignoring reloc %s\n" +msgstr "занемарујем премештање „%s“\n" + +#: coffcode.h:1005 +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:1230 +msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "%B: Упозорење: Занемарујем заставицу одељка „IMAGE_SCN_MEM_NOT_PAGED“ у одељку „%s“" + +#: coffcode.h:1297 +msgid "%B (%s): Section flag %s (0x%x) ignored" +msgstr "%B (%s): Заставица одељка „%s“ (0x%x) је занемарена" + +#: coffcode.h:2439 +#, c-format +msgid "Unrecognized TI COFF target id '0x%x'" +msgstr "Непознат ид „TI COFF“ циља „0x%x“" + +#: coffcode.h:2753 +msgid "%B: reloc against a non-existant symbol index: %ld" +msgstr "%B: премештање наспрам непостојећег индекса симбола: %ld" + +#: coffcode.h:3311 +msgid "%B: too many sections (%d)" +msgstr "%B: превише одељака (%d)" + +#: coffcode.h:3729 +msgid "%B: section %s: string table overflow at offset %ld" +msgstr "%B: одељак „%s“: прекорачење табеле ниски на померају %ld" + +#: coffcode.h:4534 +msgid "%B: warning: line number table read failed" +msgstr "%B: упозорење: није успело читање броја реда табеле" + +#: coffcode.h:4564 +msgid "%B: warning: illegal symbol index %ld in line numbers" +msgstr "%B: упозорење: неисправан индекс симбола %ld у бројевима редова" + +#: coffcode.h:4578 +msgid "%B: warning: duplicate line number information for `%s'" +msgstr "%B: упозорење: удвостручени податак о броју реда за „%s“" + +#: coffcode.h:4978 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +msgstr "%B: Непозната класа смештаја „%d“ за „%s“ симбол „%s“" + +#: coffcode.h:5104 +msgid "warning: %B: local symbol `%s' has no section" +msgstr "упозорење: %B: локални симбол „%s“ нема одељак" + +#: coffcode.h:5248 +msgid "%B: illegal relocation type %d at address 0x%lx" +msgstr "%B: неисправна врста премештања %d на адреси 0x%lx" + +#: coffgen.c:179 elf.c:1030 +msgid "%B: unable to initialize compress status for section %s" +msgstr "%B: не могу да започнем стање сажимања за одељак „%s“" + +#: coffgen.c:199 elf.c:1050 +msgid "%B: unable to initialize decompress status for section %s" +msgstr "%B: не могу да започнем стање распакивања за одељак „%s“" + +#: coffgen.c:1685 +msgid "%B: bad string table size %lu" +msgstr "%B: лоша величина табеле низа %lu" + +#: coffgen.c:2608 elflink.c:12906 linker.c:3136 +msgid "%F%P: already_linked_table: %E\n" +msgstr "%F%P: већ_повезана_табела: %E\n" + +#: cofflink.c:533 elf64-ia64-vms.c:5173 elflink.c:4356 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +msgstr "Упозорење: врста симбола „%s“ је измењена из „%d“ у „%d“ за „%B“" + +#: cofflink.c:2416 +msgid "%B: relocs in section `%A', but it has no contents" +msgstr "%B: премештања у одељку „%A“, али нема никаквог садржаја" + +#: cofflink.c:2478 elflink.c:9711 +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" + +#: cofflink.c:2777 coffswap.h:826 +#, c-format +msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" +msgstr "%s: %s: прекорачење премештања: 0x%lx > 0xffff" + +#: cofflink.c:2786 coffswap.h:812 +#, c-format +msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: упозорење: %s: прекорачење броја редова: 0x%lx > 0xffff" + +#: cpu-arm.c:190 cpu-arm.c:201 +msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgstr "грешка: „%B“ је преведен за EP9312, док је „%B“ преведен за XScale" + +#: cpu-arm.c:334 +#, c-format +msgid "warning: unable to update contents of %s section in %s" +msgstr "упозорење: не могу да освежим садржај „%s“ одељка у „%s“" + +#: dwarf2.c:514 +#, c-format +msgid "Dwarf Error: Can't find %s section." +msgstr "„DWARF“ грешка: не могу да нађем одељак „%s“." + +#: dwarf2.c:543 +#, c-format +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." +msgstr "„DWARF“ грешка: Померај (%lu) је >= величини %s (%lu)." + +#: dwarf2.c:1071 +#, c-format +msgid "Dwarf Error: Invalid or unhandled FORM value: %#x." +msgstr "„DWARF“ грешка: Неисправна или непозната вредност „FORM“: %#x." + +#: dwarf2.c:1332 +msgid "Dwarf Error: mangled line number section (bad file number)." +msgstr "„DWARF“ грешка: Број реда одељка је одсечен (лош број датотеке)." + +#: dwarf2.c:1590 +#, c-format +msgid "Dwarf Error: Unhandled .debug_line version %d." +msgstr "„DWARF“ грешка: Необрађено „.debug_line“ издање %d." + +#: dwarf2.c:1612 +msgid "Dwarf Error: Invalid maximum operations per instruction." +msgstr "„DWARF“ грешка: Неисправан највећи број операција по инструкцији." + +#: dwarf2.c:1807 +msgid "Dwarf Error: mangled line number section." +msgstr "„DWARF“ грешка: Број реда одељка је одсечен." + +#: dwarf2.c:2160 +#, c-format +msgid "Dwarf Error: Unable to read alt ref %u." +msgstr "„DWARF“ грешка: Не могу да прочитам „alt“ упуту %u." + +#: dwarf2.c:2179 dwarf2.c:2299 dwarf2.c:2595 +#, c-format +msgid "Dwarf Error: Could not find abbrev number %u." +msgstr "„DWARF“ грешка: Не могу да нађем скраћени број %u." + +#: dwarf2.c:2551 +#, c-format +msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2, 3 and 4 information." +msgstr "„DWARF“ грешка: Нађох „DWARF“ издање „%u“, овај читач ради само са подацима издања 2, 3 и 4." + +#: dwarf2.c:2560 +#, c-format +msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." +msgstr "„DWARF“ грешка: Нађох величину адресе „%u“, овај читач не може да ради са величинама већим од „%u“." + +#: dwarf2.c:2586 +#, c-format +msgid "Dwarf Error: Bad abbrev number: %u." +msgstr "„DWARF“ грешка: Лош скраћени број: %u." + +#: ecoff.c:1233 +#, c-format +msgid "Unknown basic type %d" +msgstr "Непозната основна врста „%d“" + +#: ecoff.c:1490 +#, c-format +msgid "" +"\n" +" End+1 symbol: %ld" +msgstr "" +"\n" +" Последњи+1 симбол: %ld" + +#: ecoff.c:1497 ecoff.c:1500 +#, c-format +msgid "" +"\n" +" First symbol: %ld" +msgstr "" +"\n" +" Први симбол: %ld" + +#: ecoff.c:1512 +#, c-format +msgid "" +"\n" +" End+1 symbol: %-7ld Type: %s" +msgstr "" +"\n" +" Последњи+1 симбол: %-7ld Врста: %s" + +#: ecoff.c:1519 +#, c-format +msgid "" +"\n" +" Local symbol: %ld" +msgstr "" +"\n" +" Локални симбол: %ld" + +#: ecoff.c:1527 +#, c-format +msgid "" +"\n" +" struct; End+1 symbol: %ld" +msgstr "" +"\n" +" struct; Последњи+1 симбол: %ld" + +#: ecoff.c:1532 +#, c-format +msgid "" +"\n" +" union; End+1 symbol: %ld" +msgstr "" +"\n" +" union; Последњи+1 симбол: %ld" + +#: ecoff.c:1537 +#, c-format +msgid "" +"\n" +" enum; End+1 symbol: %ld" +msgstr "" +"\n" +" enum; Последњи+1 симбол: %ld" + +#: ecoff.c:1543 +#, c-format +msgid "" +"\n" +" Type: %s" +msgstr "" +"\n" +" Врста: %s" + +#: elf-attrs.c:573 +msgid "error: %B: Object has vendor-specific contents that must be processed by the '%s' toolchain" +msgstr "грешка: %B: Објекат има садржај продавцу специфичан који мора бити обрађен алатним ланцем „%s“" + +#: elf-attrs.c:582 +msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'" +msgstr "грешка: %B: Ознака објекта „%d, %s“ није сагласна са ознаком „%d, %s“" + +#: elf-eh-frame.c:921 +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:1193 +msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "%P: фде кодирање у „%B(%A)“ спречава стварање „.eh_frame_hdr“ табеле.\n" + +#: elf-eh-frame.c:1612 +msgid "%P: DW_EH_PE_datarel unspecified for this architecture.\n" +msgstr "%P: „DW_EH_PE_datarel“ није одређено за ову архитектуру.\n" + +#: elf-ifunc.c:135 +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: динамички „STT_GNU_IFUNC“ симбол „%s“ са једнакошћу показивача у „%B“ се не може користити приликом стварања извршне; преведите поново са „-fPIE“ и повежите поново са „-pie“\n" + +#: elf-m10200.c:430 elf-m10300.c:2164 elf32-avr.c:1256 elf32-bfin.c:3220 +#: elf32-cr16.c:1484 elf32-cr16c.c:780 elf32-cris.c:2016 elf32-crx.c:922 +#: elf32-d10v.c:513 elf32-epiphany.c:557 elf32-fr30.c:589 elf32-frv.c:4039 +#: elf32-h8300.c:525 elf32-i860.c:1212 elf32-ip2k.c:1468 elf32-iq2000.c:688 +#: elf32-lm32.c:1160 elf32-m32c.c:553 elf32-m32r.c:3066 elf32-m68hc1x.c:1283 +#: elf32-mep.c:535 elf32-metag.c:1992 elf32-microblaze.c:1560 +#: elf32-moxie.c:282 elf32-mt.c:395 elf32-nds32.c:4910 elf32-openrisc.c:404 +#: elf32-score.c:2729 elf32-score7.c:2537 elf32-spu.c:5041 +#: elf32-tilepro.c:3666 elf32-v850.c:2281 elf32-xstormy16.c:936 +#: elf64-mmix.c:1538 elfxx-tilegx.c:4051 +msgid "internal error: out of range error" +msgstr "унутрашња грешка: изван опсега" + +#: elf-m10200.c:434 elf-m10300.c:2168 elf32-avr.c:1260 elf32-bfin.c:3224 +#: elf32-cr16.c:1488 elf32-cr16c.c:784 elf32-cris.c:2020 elf32-crx.c:926 +#: elf32-d10v.c:517 elf32-fr30.c:593 elf32-frv.c:4043 elf32-h8300.c:529 +#: elf32-i860.c:1216 elf32-iq2000.c:692 elf32-lm32.c:1164 elf32-m32c.c:557 +#: elf32-m32r.c:3070 elf32-m68hc1x.c:1287 elf32-mep.c:539 elf32-metag.c:1996 +#: elf32-microblaze.c:1564 elf32-moxie.c:286 elf32-msp430.c:1321 +#: elf32-nds32.c:4914 elf32-openrisc.c:408 elf32-score.c:2733 +#: elf32-score7.c:2541 elf32-spu.c:5045 elf32-tilepro.c:3670 elf32-v850.c:2285 +#: elf32-xstormy16.c:940 elf64-mmix.c:1542 elfxx-mips.c:9995 +#: elfxx-tilegx.c:4055 +msgid "internal error: unsupported relocation error" +msgstr "унутрашња грешка: премештање није подржано" + +#: elf-m10200.c:438 elf32-cr16.c:1492 elf32-cr16c.c:788 elf32-crx.c:930 +#: elf32-d10v.c:521 elf32-h8300.c:533 elf32-lm32.c:1168 elf32-m32r.c:3074 +#: elf32-m68hc1x.c:1291 elf32-microblaze.c:1568 elf32-nds32.c:4918 +#: elf32-score.c:2737 elf32-score7.c:2545 elf32-spu.c:5049 +msgid "internal error: dangerous error" +msgstr "унутрашња грешка: грешка опасности" + +#: elf-m10200.c:442 elf-m10300.c:2184 elf32-avr.c:1268 elf32-bfin.c:3232 +#: elf32-cr16.c:1496 elf32-cr16c.c:792 elf32-cris.c:2028 elf32-crx.c:934 +#: elf32-d10v.c:525 elf32-epiphany.c:572 elf32-fr30.c:601 elf32-frv.c:4051 +#: elf32-h8300.c:537 elf32-i860.c:1224 elf32-ip2k.c:1483 elf32-iq2000.c:700 +#: elf32-lm32.c:1172 elf32-m32c.c:565 elf32-m32r.c:3078 elf32-m68hc1x.c:1295 +#: elf32-mep.c:547 elf32-metag.c:2004 elf32-microblaze.c:1572 +#: elf32-moxie.c:294 elf32-msp430.c:1329 elf32-mt.c:403 elf32-nds32.c:4922 +#: elf32-openrisc.c:416 elf32-score.c:2746 elf32-score7.c:2549 +#: elf32-spu.c:5053 elf32-tilepro.c:3678 elf32-v850.c:2305 +#: elf32-xstormy16.c:948 elf64-mmix.c:1550 elfxx-tilegx.c:4063 +msgid "internal error: unknown error" +msgstr "унутрашња грешка: непозната грешка" + +#: elf-m10300.c:1021 +#, c-format +msgid "%s: Unsupported transition from %s to %s" +msgstr "%s: Прелазак са „%s“ на „%s“ није подржан" + +#: elf-m10300.c:1213 +msgid "%B: %s' accessed both as normal and thread local symbol" +msgstr "%B: „%s“ се приступило и као нормалном и као симболу локалне нити" + +#: elf-m10300.c:2108 elf32-arm.c:10632 elf32-i386.c:4363 elf32-m32r.c:2558 +#: elf32-m68k.c:4120 elf32-s390.c:3303 elf32-sh.c:4109 elf32-tilepro.c:3569 +#: elf32-xtensa.c:3063 elf64-s390.c:3229 elf64-sh64.c:1640 elf64-x86-64.c:4463 +#: elfxx-sparc.c:3904 elfxx-tilegx.c:3974 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4450 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): нерешиво „%s“ премештање наспрам симбола „%s“" + +#: elf-m10300.c:2173 +msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" +msgstr "грешка: врста премештања није одговарајућа за дељену библиотеку (да ли сте заборавили „-fpic“?)" + +#: elf-m10300.c:2176 +msgid "%B: taking the address of protected function '%s' cannot be done when making a shared library" +msgstr "%B: узимање адресе заштићене функције „%s“ не може бити обављено приликом стварања дељене библиотеке" + +#: elf-m10300.c:2179 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "унутрашња грешка: сумњива врста премештања је коришћена у дељеној библиотеци" + +#: elf.c:343 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "%B: неисправан померај ниске „%u >= %lu“ за одељак „%s“" + +#: elf.c:455 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "„%B“ симбол број %lu упућује на непостојећи одељак „SHT_SYMTAB_SHNDX“" + +#: elf.c:611 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "%B: Оштећено је поље величине у заглављу одељка групе: 0x%lx" + +#: elf.c:647 +msgid "%B: invalid SHT_GROUP entry" +msgstr "%B: неисправан унос „SHT_GROUP“" + +#: elf.c:717 +msgid "%B: no group info for section %A" +msgstr "%B: нема података групе за одељак „%A“" + +#: elf.c:746 elf.c:3144 elflink.c:10290 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "%B: упозорење: „sh_link“ није постављено за одељак „%A“" + +#: elf.c:765 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "%B: „sh_link [%d]“ у одељку „%A“ није исправно" + +#: elf.c:800 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "%B: [%d] непознат одељак „%s“ у групи [%s]" + +#: elf.c:1174 +#, c-format +msgid "" +"\n" +"Program Header:\n" +msgstr "" +"\n" +"Заглавље програма:\n" + +#: elf.c:1216 +#, c-format +msgid "" +"\n" +"Dynamic Section:\n" +msgstr "" +"\n" +"Динамички одељак:\n" + +#: elf.c:1352 +#, c-format +msgid "" +"\n" +"Version definitions:\n" +msgstr "" +"\n" +"Дефиниција издања:\n" + +#: elf.c:1377 +#, c-format +msgid "" +"\n" +"Version References:\n" +msgstr "" +"\n" +"Упута издања:\n" + +#: elf.c:1382 +#, c-format +msgid " required from %s:\n" +msgstr " захтевано из „%s“:\n" + +#: elf.c:1807 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "%B: неисправна веза „%lu“ за одељак премештања „%s“ (индекс „%u“)" + +#: elf.c:1977 +msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +msgstr "%B: не знам како да обрадим додељен, програму специфичан одељак „%s“ [0x%8x]" + +#: elf.c:1989 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "%B: не знам како да обрадим процесору специфичан одељак „%s“ [0x%8x]" + +#: elf.c:2000 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "%B: не знам како да обрадим систему специфичан одељак „%s“ [0x%8x]" + +#: elf.c:2010 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "%B: не знам како да обрадим одељак „%s“ [0x%8x]" + +#: elf.c:2648 +#, c-format +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "упозорење: врста „%A“ одељка је измењена у „PROGBITS“" + +#: elf.c:3015 +msgid "%B: too many sections: %u" +msgstr "%B: превише одељака: %u" + +#: elf.c:3101 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "%B: „sh_link“ одељка „%A“ указује на одбачени одељак „%A“ од „%B“" + +#: elf.c:3124 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "%B: „sh_link“ одељка „%A“ указује на уклоњени одељак „%A“ од „%B“" + +#: elf.c:4126 +msgid "%B: TLS sections are not adjacent:" +msgstr "%B: ТЛС одељци нису суседни:" + +#: elf.c:4133 +#, c-format +msgid "\t TLS: %A" +msgstr "\t ТЛС: %A" + +#: elf.c:4137 +#, c-format +msgid "\tnon-TLS: %A" +msgstr "\tне-ТЛС: %A" + +#: elf.c:4596 +msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%B: Први одељак у подеоку „PT_DYNAMIC“ није „.dynamic“ одељак" + +#: elf.c:4621 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "%B: Нема довољно места за заглавље програм, пробајте да повежете са „-N“" + +#: elf.c:4707 +msgid "%B: section %A lma %#lx adjusted to %#lx" +msgstr "%B: одељак „%A lma %#lx“ је дотеран на %#lx" + +#: elf.c:4843 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "%B: одељак „%A“ се не може доделити у подеоку %d" + +#: elf.c:4892 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "%B: упозорење: додељени одељак „%s“ није у подеоку" + +#: elf.c:5473 +msgid "%B: symbol `%s' required but not present" +msgstr "%B: симбол „%s“ је потребан али није присутан" + +#: elf.c:5811 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "%B: упозорење: Откривен је празан подеок који се може учитати, да ли је то намеравано ?\n" + +#: elf.c:6867 +#, c-format +msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "Не могу да нађем еквивалентан одељак излаза за симбол „%s“ из одељка „%s“" + +#: elf.c:7915 +msgid "%B: unsupported relocation type %s" +msgstr "%B: врста премештања %s није подржана" + +#: elf32-arm.c:3722 elf32-arm.c:7051 +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:3769 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: ARM call to Thumb" +msgstr "" +"%B(%s): упозорење: међудејство није укључено.\n" +" прво појављивање: %B: „ARM“ позива на „Thumb“" + +#: elf32-arm.c:3988 elf32-arm.c:5433 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:2324 +#, c-format +msgid "%s: cannot create stub entry %s" +msgstr "%s: не могу да створим привидни унос „%s“" + +#: elf32-arm.c:5549 +#, c-format +msgid "unable to find THUMB glue '%s' for '%s'" +msgstr "не могу да пронађем „THUMB“ лепак „%s“ за „%s“" + +#: elf32-arm.c:5585 +#, c-format +msgid "unable to find ARM glue '%s' for '%s'" +msgstr "не могу да пронађем „ARM“ лепак „%s“ за „%s“" + +#: elf32-arm.c:6123 +msgid "%B: BE8 images only valid in big-endian mode." +msgstr "%B: „BE8“ слике су исправне само у режиму велике крајњости." + +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:6353 +msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%B: упозорење: изабрано решење „VFP11“ грешака није потребно за циљну архитектуру" + +#: elf32-arm.c:6897 elf32-arm.c:6917 +msgid "%B: unable to find VFP11 veneer `%s'" +msgstr "%B: не могу да нађем „VFP11“ превлаку „%s“" + +#: elf32-arm.c:6966 +#, c-format +msgid "Invalid TARGET2 relocation type '%s'." +msgstr "Неисправна врста „TARGET2“ премештања „%s“." + +#. PR ld/16017: Do not generate ARM instructions for +#. the PLT if compiling for a thumb-only target. +#. +#. FIXME: We ought to be able to generate thumb PLT instructions... +#: elf32-arm.c:7696 +msgid "%B: Warning: thumb mode PLT generation not currently supported" +msgstr "%B: Упозорење: „PLT“ стварање у „thumb“ режиму тренутно није подржано" + +#: elf32-arm.c:7909 +msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline" +msgstr "%B(%A+0x%lx): неочекивана „Thumb“ инструкција „0x%x“ у „TLS“ трамбулини" + +#: elf32-arm.c:7948 +msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' in TLS trampoline" +msgstr "%B(%A+0x%lx): неочекивана „ARM“ инструкција „0x%x“ у „TLS“ трамбулини" + +#: elf32-arm.c:8412 +msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." +msgstr "\\%B: Упозорење: инструкција „Arm BLX“ циља на Арм функцију „%s“." + +#: elf32-arm.c:8831 +msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." +msgstr "%B: Упозорење: „Thumb BLX“ инструкција циља на „thumb“ функцију „%s“." + +#: elf32-arm.c:9672 +msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC" +msgstr "%B(%A+0x%lx): неочекивана „Thumb“ инструкција „0x%x“ на коју упућује „TLS_GOTDESC“" + +#: elf32-arm.c:9695 +msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' referenced by TLS_GOTDESC" +msgstr "%B(%A+0x%lx): неочекивана „ARM“ инструкција „0x%x“ на коју упућује „TLS_GOTDESC“" + +#: elf32-arm.c:9724 +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:9937 +msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%B(%A+0x%lx): Дозвољене су само „ADD“ или „SUB“ инструкције за премештања „ALU“ групе" + +#: elf32-arm.c:9977 elf32-arm.c:10065 elf32-arm.c:10149 elf32-arm.c:10235 +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:10474 elf32-sh.c:3994 elf64-sh64.c:1544 +msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" +msgstr "%B(%A+0x%lx): „%s“ премештање наспрам „SEC_MERGE“ одељка" + +#: elf32-arm.c:10585 elf32-m68k.c:4155 elf32-xtensa.c:2799 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4192 +msgid "%B(%A+0x%lx): %s used with TLS symbol %s" +msgstr "%B(%A+0x%lx): „%s“ је употребљено са „TLS“ симболом „%s“" + +#: elf32-arm.c:10586 elf32-m68k.c:4156 elf32-xtensa.c:2800 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4193 +msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" +msgstr "%B(%A+0x%lx): „%s“ је употребљено са „не-TLS“ симболом „%s“" + +#: elf32-arm.c:10666 elf32-tic6x.c:2736 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4481 +msgid "out of range" +msgstr "изван опсега" + +#: elf32-arm.c:10670 elf32-nios2.c:3525 elf32-tic6x.c:2740 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4485 +msgid "unsupported relocation" +msgstr "неподржано премештање" + +#: elf32-arm.c:10678 elf32-nios2.c:3535 elf32-tic6x.c:2748 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4493 +msgid "unknown error" +msgstr "непозната грешка" + +#: elf32-arm.c:11153 +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:11240 +msgid "%B: Unknown mandatory EABI object attribute %d" +msgstr "%B: Обавезан „%d“ атрибут „EABI“ објекта није познат" + +#: elf32-arm.c:11248 +msgid "Warning: %B: Unknown EABI object attribute %d" +msgstr "Упозорење: %B: „%d“ атрибут „EABI“ објекта није познат" + +#: elf32-arm.c:11449 +msgid "error: %B: Unknown CPU architecture" +msgstr "грешка: %B: Непозната архитектура процесора" + +#: elf32-arm.c:11487 +msgid "error: %B: Conflicting CPU architectures %d/%d" +msgstr "грешка: %B: Архитектуре процесора %d/%d су у сукобу" + +#: elf32-arm.c:11576 +msgid "Error: %B has both the current and legacy Tag_MPextension_use attributes" +msgstr "грешка: „%B“ поседује и тренутни и стари „Tag_MPextension_use“ атрибут" + +#: elf32-arm.c:11601 +msgid "error: %B uses VFP register arguments, %B does not" +msgstr "грешка: „%B“ користи аргументе „VFP“ регистра, а „%B“ не" + +#: elf32-arm.c:11747 +msgid "error: %B: unable to merge virtualization attributes with %B" +msgstr "грешка: %B: не могу да спојим атрибуте виртуелизације са „%B“" + +#: elf32-arm.c:11773 +msgid "error: %B: Conflicting architecture profiles %c/%c" +msgstr "грешка: %B: У сукобу су профили архитектуре „%c/%c“" + +#: elf32-arm.c:11877 +msgid "Warning: %B: Conflicting platform configuration" +msgstr "Упозорење: %B: Подешавање платформе је у сукобу" + +#: elf32-arm.c:11886 +msgid "error: %B: Conflicting use of R9" +msgstr "грешка: %B: У сикобу је коришћење „R9“" + +#: elf32-arm.c:11898 +msgid "error: %B: SB relative addressing conflicts with use of R9" +msgstr "грешка: %B: Релативно „SB“ адресирање је у сукобу са коришћењем „R9“" + +#: elf32-arm.c:11911 +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:11942 +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 набрајања онда ће излаз да користи %s набрајања. Коришћење вредности набрајања кроз објекте можда неће успети" + +#: elf32-arm.c:11954 +msgid "error: %B uses iWMMXt register arguments, %B does not" +msgstr "грешка: „%B“ користи аргументе „iWMMXt“ регистра, а „%B“ не" + +#: elf32-arm.c:11971 +msgid "error: fp16 format mismatch between %B and %B" +msgstr "грешка: „fp16“ запис није исти за „%B“ и „%B“" + +#: elf32-arm.c:12007 +msgid "%B has has both the current and legacy Tag_MPextension_use attributes" +msgstr "„%B“ поседује и тренутни и стари „Tag_MPextension_use“ атрибут" + +#. 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. +#. Ignore init flag - it may not be set, despite the flags field +#. containing valid data. +#: elf32-arm.c:12095 elf32-bfin.c:4949 elf32-cris.c:4139 elf32-m68hc1x.c:1427 +#: elf32-m68k.c:1195 elf32-score.c:4004 elf32-score7.c:3808 elf32-vax.c:529 +#: elf32-xgate.c:674 elfxx-mips.c:14955 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4645 +#, c-format +msgid "private flags = %lx:" +msgstr "приватне заставице = %lx:" + +#: elf32-arm.c:12104 +#, c-format +msgid " [interworking enabled]" +msgstr " [међудејство је укључено]" + +#: elf32-arm.c:12112 +#, c-format +msgid " [VFP float format]" +msgstr " [„VFP“ запис децималног броја]" + +#: elf32-arm.c:12114 +#, c-format +msgid " [Maverick float format]" +msgstr " [„Maverick“ запис децималног броја]" + +#: elf32-arm.c:12116 +#, c-format +msgid " [FPA float format]" +msgstr " [„FPA“ запис децималног броја]" + +#: elf32-arm.c:12125 +#, c-format +msgid " [new ABI]" +msgstr " [нови „ABI“]" + +#: elf32-arm.c:12128 +#, c-format +msgid " [old ABI]" +msgstr " [стари „ABI“]" + +#: elf32-arm.c:12131 +#, c-format +msgid " [software FP]" +msgstr " [логички покретни зарез]" + +#: elf32-arm.c:12140 +#, c-format +msgid " [Version1 EABI]" +msgstr " [Издање1 „EABI“]" + +#: elf32-arm.c:12143 elf32-arm.c:12154 +#, c-format +msgid " [sorted symbol table]" +msgstr " [табела сређених симбола]" + +#: elf32-arm.c:12145 elf32-arm.c:12156 +#, c-format +msgid " [unsorted symbol table]" +msgstr " [табела несређених симбола]" + +#: elf32-arm.c:12151 +#, c-format +msgid " [Version2 EABI]" +msgstr " [Издање2 „EABI“]" + +#: elf32-arm.c:12159 +#, c-format +msgid " [dynamic symbols use segment index]" +msgstr " [динамички симболи користе индекс сегмента]" + +#: elf32-arm.c:12162 +#, c-format +msgid " [mapping symbols precede others]" +msgstr " [мапирање симбола претходи другима]" + +#: elf32-arm.c:12169 +#, c-format +msgid " [Version3 EABI]" +msgstr " [Издање3 „EABI“]" + +#: elf32-arm.c:12173 +#, c-format +msgid " [Version4 EABI]" +msgstr " [Издање4 „EABI“]" + +#: elf32-arm.c:12177 +#, c-format +msgid " [Version5 EABI]" +msgstr " [Издање5 „EABI“]" + +#: elf32-arm.c:12180 +#, c-format +msgid " [soft-float ABI]" +msgstr " [„ABI“ софтверског покретног зареза]" + +#: elf32-arm.c:12183 +#, c-format +msgid " [hard-float ABI]" +msgstr " [„ABI“ хардверског покретног зареза]" + +#: elf32-arm.c:12189 +#, c-format +msgid " [BE8]" +msgstr " [BE8]" + +#: elf32-arm.c:12192 +#, c-format +msgid " [LE8]" +msgstr " [LE8]" + +#: elf32-arm.c:12198 +#, c-format +msgid " " +msgstr " <Непознато „EABI“ издање>" + +#: elf32-arm.c:12205 +#, c-format +msgid " [relocatable executable]" +msgstr " [преместива извршна]" + +#: elf32-arm.c:12208 +#, c-format +msgid " [has entry point]" +msgstr " [има тачку улаза]" + +#: elf32-arm.c:12213 /src/binutils-gdb/bfd/elfnn-aarch64.c:4648 +#, c-format +msgid "" +msgstr "<Непознат скуп битова заставице>" + +#: elf32-arm.c:12522 elf32-i386.c:1452 elf32-s390.c:1005 elf32-tic6x.c:2812 +#: elf32-tilepro.c:1511 elf32-xtensa.c:999 elf64-s390.c:927 +#: elf64-x86-64.c:1467 elfxx-sparc.c:1415 elfxx-tilegx.c:1728 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:5038 +msgid "%B: bad symbol index: %d" +msgstr "%B: лош индекс симбола: %d" + +#: elf32-arm.c:12674 elf32-metag.c:2283 elf64-x86-64.c:1593 +#: elf64-x86-64.c:1771 elfxx-mips.c:8482 +msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: премештање „%s“ наспрам „%s“ се не може користити приликом стварања дељеног објекта; поново преведите са „-fPIC“" + +#: elf32-arm.c:13796 +#, c-format +msgid "Errors encountered processing file %s" +msgstr "Наиђох на грешке током обраде датотеке „%s“" + +#: elf32-arm.c:14230 +#, c-format +msgid "error: required section '%s' not found in the linker script" +msgstr "грешка: нисам нашао тражени одељак „%s“ у скрипти повезивача" + +#: elf32-arm.c:15252 +msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location" +msgstr "%B: грешка: Окрајак грешке Кортекса А8 је додељен небезбедној локацији" + +#. There's not much we can do apart from complain if this +#. happens. +#: elf32-arm.c:15279 +msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)" +msgstr "%B: грешка: Окрајак грешке Кортекса А8 је ван опсега (улазна датотека је превелика)" + +#: elf32-arm.c:15373 elf32-arm.c:15395 +msgid "%B: error: VFP11 veneer out of range" +msgstr "%B: грешка: „VFP11“ превлака је ван опсега" + +#: elf32-arm.c:16020 +msgid "error: %B is already in final BE8 format" +msgstr "грешка: „%B“ је већ у завршном запису „BE8“" + +#: elf32-arm.c:16096 +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:16112 +msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +msgstr "грешка: „%B“ је преведен за „APCS-%d“, док циљни „%B“ користи „APCS-%d“" + +#: elf32-arm.c:16137 +msgid "error: %B uses VFP instructions, whereas %B does not" +msgstr "грешка: „%B“ користи „VFP“ инструкције, али „%B“ не" + +#: elf32-arm.c:16141 +msgid "error: %B uses FPA instructions, whereas %B does not" +msgstr "грешка: „%B“ користи „FPA“ инструкције, али „%B“ не" + +#: elf32-arm.c:16151 +msgid "error: %B uses Maverick instructions, whereas %B does not" +msgstr "грешка: „%B“ користи „Maverick“ инструкције, али „%B“ не" + +#: elf32-arm.c:16155 +msgid "error: %B does not use Maverick instructions, whereas %B does" +msgstr "грешка: „%B“ не користи „Maverick“ инструкције, али „%B“ да" + +#: elf32-arm.c:16174 +msgid "error: %B uses software FP, whereas %B uses hardware FP" +msgstr "грешка: „%B“ користи софтверски покретни зарез, док „%B“ користи хардверски" + +#: elf32-arm.c:16178 +msgid "error: %B uses hardware FP, whereas %B uses software FP" +msgstr "грешка: „%B“ користи хардверски покретни зарез, док „%B“ користи софтверски" + +#: elf32-avr.c:1264 elf32-bfin.c:3228 elf32-cris.c:2024 elf32-epiphany.c:568 +#: elf32-fr30.c:597 elf32-frv.c:4047 elf32-i860.c:1220 elf32-ip2k.c:1479 +#: elf32-iq2000.c:696 elf32-m32c.c:561 elf32-mep.c:543 elf32-metag.c:2000 +#: elf32-moxie.c:290 elf32-msp430.c:1325 elf32-mt.c:399 elf32-openrisc.c:412 +#: elf32-tilepro.c:3674 elf32-v850.c:2289 elf32-xstormy16.c:944 +#: elf64-mmix.c:1546 elfxx-tilegx.c:4059 +msgid "internal error: dangerous relocation" +msgstr "унутрашња грешка: опасно премештање" + +#: elf32-avr.c:2476 elf32-hppa.c:578 elf32-m68hc1x.c:160 elf32-metag.c:1197 +#: elf32-nios2.c:1357 +msgid "%B: cannot create stub entry %s" +msgstr "%B: не могу да створим унос окрајка „%s“" + +#: elf32-bfin.c:107 elf32-bfin.c:363 +msgid "relocation should be even number" +msgstr "премештање треба бити паран број" + +#: elf32-bfin.c:1601 +msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): нерешиво премештање наспрам симбола „%s“" + +#: elf32-bfin.c:1634 elf32-i386.c:4406 elf32-m68k.c:4197 elf32-s390.c:3364 +#: elf64-s390.c:3290 elf64-x86-64.c:4506 +msgid "%B(%A+0x%lx): reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): премештање наспрам „%s“: грешка %d" + +#: elf32-bfin.c:2732 +msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" +msgstr "%B: премештање на „%A+0x%x“ ствара упуту симбола „%s“ са не-нултим сабирком" + +#: elf32-bfin.c:2748 +msgid "relocation references symbol not defined in the module" +msgstr "премештање упућује на симбол који није дефинисан у модулу" + +#: elf32-bfin.c:2845 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "„R_BFIN_FUNCDESC“ ствара упуту динамичког симбола са не-нултим сабирком" + +#: elf32-bfin.c:2886 elf32-bfin.c:3009 +msgid "cannot emit fixups in read-only section" +msgstr "не могу да пошаљем исправке у одељку само за читање" + +#: elf32-bfin.c:2917 elf32-bfin.c:3047 elf32-lm32.c:1095 elf32-sh.c:4913 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "не могу да пошаљем динамичка премештања у одељку само за читање" + +#: elf32-bfin.c:2967 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "„R_BFIN_FUNCDESC_VALUE“ ствара упуту динамичког симбола са не-нултим сабирком" + +#: elf32-bfin.c:3132 +msgid "relocations between different segments are not supported" +msgstr "премештања између различитих сегмената нису подржана" + +#: elf32-bfin.c:3133 +msgid "warning: relocation references a different segment" +msgstr "упозорење: премештање упућује на другачији сегмент" + +#: elf32-bfin.c:4907 +msgid "%B: unsupported relocation type %i" +msgstr "%B: врста премештања „%i“ није подржана" + +#: elf32-bfin.c:4995 elf32-frv.c:6600 +#, c-format +msgid "%s: cannot link non-fdpic object file into fdpic executable" +msgstr "%s: не могу да повежем датотеку не-„fdpic“ објекта у „fdpic“ извршну" + +#: elf32-bfin.c:4999 elf32-frv.c:6604 +#, c-format +msgid "%s: cannot link fdpic object file into non-fdpic executable" +msgstr "%s: не могу да повежем датотеку „fdpic“ објекта у не-„fdpic“ извршну" + +#: elf32-bfin.c:5153 +#, c-format +msgid "*** check this relocation %s" +msgstr "*** проверава ово премештање „%s“" + +#: elf32-cris.c:1110 +msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" +msgstr "„%B“, одељак „%A“: нерешиво премештање „%s“ наспрам симбола „%s“" + +#: elf32-cris.c:1172 +msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" +msgstr "„%B“, одељак „%A“: Нема ни „PLT“ ни „GOT“ за премештање „%s“ наспрам симбола „%s“" + +#: elf32-cris.c:1174 +msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" +msgstr "„%B“, одељак „%A“: Нема „PLT“ за премештање „%s“ наспрам симбола „%s“" + +#: elf32-cris.c:1180 elf32-cris.c:1313 elf32-cris.c:1573 elf32-cris.c:1656 +#: elf32-cris.c:1809 elf32-tic6x.c:2645 +msgid "[whose name is lost]" +msgstr "[чији назив је изгубљен]" + +#: elf32-cris.c:1299 elf32-tic6x.c:2630 +msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" +msgstr "„%B“, одељак „%A“: премештање „%s“ са не-нултим сабирком %d наспрам локалног симбола" + +#: elf32-cris.c:1307 elf32-cris.c:1650 elf32-cris.c:1803 elf32-tic6x.c:2638 +msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" +msgstr "„%B“, одељак „%A“: премештање „%s“ са не-нултим сабирком %d наспрам симбола „%s“" + +#: elf32-cris.c:1333 +msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" +msgstr "„%B“, одељак „%A“: премештање „%s“ није дозвољено за општи симбол: „%s“" + +#: elf32-cris.c:1349 +msgid "%B, section %A: relocation %s with no GOT created" +msgstr "„%B“, одељак „%A“: премештање „%s“ без створеног „GOT“" + +#. We shouldn't get here for GCC-emitted code. +#: elf32-cris.c:1564 +msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?" +msgstr "„%B“, одељак „%A“: премештање „%s“ садржи недефинисану упуту ка „%s“, можда је дошло до мешања декларације?" + +#: elf32-cris.c:1937 +msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?" +msgstr "„%B“, одељак „%A“: премештање „%s“ није дозвољено за симбол „%s“, који је дефинисан изван програма, можда је дошло до мешања декларације?" + +#: elf32-cris.c:1990 +msgid "(too many global variables for -fpic: recompile with -fPIC)" +msgstr "(превише општих променљивих за „-fpic“: поново преведите са „-fPIC“)" + +#: elf32-cris.c:1997 +msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)" +msgstr "(локални подаци нити су превелики за „-fpic“ или „-msmall-tls“: поново преведите са „-fPIC“ или „-mno-small-tls“)" + +#: elf32-cris.c:3234 +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:3342 +msgid "" +"%B, section %A:\n" +" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC" +msgstr "" +"„%B“, одељак „%A“:\n" +" премештање „%s“ није исправно у дељеном објекту; типично мешање опција, поново преведите са „-fPIC“" + +#: elf32-cris.c:3556 +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:3978 +msgid "" +"%B, section `%A', to symbol `%s':\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" +"„%B“, одељак „%A“, ка симболу „%s“:\n" +" премештање „%s“ не треба да се користи у дељеном објекту; поново преведите са „-fPIC“" + +#: elf32-cris.c:4091 +msgid "Unexpected machine number" +msgstr "Неочекивани машински број" + +#: elf32-cris.c:4142 +#, c-format +msgid " [symbols have a _ prefix]" +msgstr " [симболи садрже префиксе „ _ “]" + +#: elf32-cris.c:4145 +#, c-format +msgid " [v10 and v32]" +msgstr " [v10 и v32]" + +#: elf32-cris.c:4148 +#, c-format +msgid " [v32]" +msgstr " [v32]" + +#: elf32-cris.c:4191 +msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" +msgstr "%B: користи симболе са префиксом „_“, али записује датотеку са симболима без префикса" + +#: elf32-cris.c:4192 +msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" +msgstr "%B: користи симболе без префикса, али записује датотеку са симболима са префиксом „_“" + +#: elf32-cris.c:4211 +msgid "%B contains CRIS v32 code, incompatible with previous objects" +msgstr "„%B„ садржи „CRIS v32“ код који није сагласан са претходним објектима" + +#: elf32-cris.c:4213 +msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" +msgstr "„%B„ садржи не-„CRIS-v32“ код који није сагласан са претходним објектима" + +#: elf32-dlx.c:142 +#, c-format +msgid "BFD Link Error: branch (PC rel16) to section (%s) not supported" +msgstr "грешка БФД везе: гранање (PC rel16) у одељак (%s) није подржано" + +#: elf32-dlx.c:204 +#, c-format +msgid "BFD Link Error: jump (PC rel26) to section (%s) not supported" +msgstr "грешка БФД везе: ускакање (PC rel26) у одељак (%s) није подржано" + +#. Only if it's not an unresolved symbol. +#: elf32-epiphany.c:564 elf32-ip2k.c:1475 +msgid "unsupported relocation between data/insn address spaces" +msgstr "није подржано премештање између размака адресе „data/insn“" + +#: elf32-frv.c:1460 elf32-frv.c:1609 +msgid "relocation requires zero addend" +msgstr "премештање захтева нулти сабирак" + +#: elf32-frv.c:2822 +msgid "%H: relocation to `%s+%v' may have caused the error above\n" +msgstr "%H: „премештање у „%s+%v“ је можда проузроковало горњу грешку\n" + +#: elf32-frv.c:2839 +msgid "%H: relocation references symbol not defined in the module\n" +msgstr "%H: „премештање упућује на симбол који није дефинисан у модулу\n" + +#: elf32-frv.c:2915 +msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" +msgstr "%H: „R_FRV_GETTLSOFF“ није примењено на инструкцију позива\n" + +#: elf32-frv.c:2956 +msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" +msgstr "%H: „R_FRV_GOTTLSDESC12“ није примењено на инструкцију „lddi“\n" + +#: elf32-frv.c:3027 +msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" +msgstr "%H: „R_FRV_GOTTLSDESCHI“ није примењено на инструкцију „sethi“\n" + +#: elf32-frv.c:3064 +msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" +msgstr "%H: „R_FRV_GOTTLSDESCLO“ није примењено на инструкцију „setlo“ или „setlos“\n" + +#: elf32-frv.c:3111 +msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" +msgstr "%H: „R_FRV_TLSDESC_RELAX“ није примењено на инструкцију „ldd“\n" + +#: elf32-frv.c:3195 +msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" +msgstr "%H: „R_FRV_GETTLSOFF_RELAX“ није примењено на инструкцију „calll“\n" + +#: elf32-frv.c:3249 +msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" +msgstr "%H: „R_FRV_GOTTLSOFF12“ није примењено на инструкцију „ldi“\n" + +#: elf32-frv.c:3279 +msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" +msgstr "%H: „R_FRV_GOTTLSOFFHI“ није примењено на инструкцију „sethi“\n" + +#: elf32-frv.c:3308 +msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" +msgstr "%H: „R_FRV_GOTTLSOFFLO“ није примењено на инструкцију „setlo“ или „setlos“\n" + +#: elf32-frv.c:3338 +msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" +msgstr "%H: „R_FRV_TLSOFF_RELAX“ није примењено на инструкцију „ld“\n" + +#: elf32-frv.c:3383 +msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" +msgstr "%H: „R_FRV_TLSMOFFHI“ није примењено на инструкцију „sethi“\n" + +#: elf32-frv.c:3410 +msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" +msgstr "R_FRV_TLSMOFFLO“ није примењено на инструкцију „setlo“ или „setlos“\n" + +#: elf32-frv.c:3531 +msgid "%H: R_FRV_FUNCDESC references dynamic symbol with nonzero addend\n" +msgstr "%H: „R_FRV_FUNCDESC“ ствара упуту динамичког симбола са не-нултим сабирком\n" + +#: elf32-frv.c:3572 elf32-frv.c:3694 +msgid "%H: cannot emit fixups in read-only section\n" +msgstr "%H: не могу да пошаљем исправке у одељку који је само за читање\n" + +#: elf32-frv.c:3603 elf32-frv.c:3737 +msgid "%H: cannot emit dynamic relocations in read-only section\n" +msgstr "%H: не могу да пошаљем динамичка премештања у одељку само за читање\n" + +#: elf32-frv.c:3652 +msgid "%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend\n" +msgstr "%H: „R_FRV_FUNCDESC_VALUE“ ствара упуту динамичког симбола са не-нултим сабирком\n" + +#: elf32-frv.c:3908 +msgid "%H: reloc against `%s' references a different segment\n" +msgstr "%H: премештање наспрам „%s“ ствара упуту другог сегмента\n" + +#: elf32-frv.c:4058 +msgid "%H: reloc against `%s': %s\n" +msgstr "%H: премештање наспрам „%s“: %s\n" + +#: elf32-frv.c:6265 +msgid "%B: unsupported relocation type %i\n" +msgstr "%B: врста премештања „%i“ није подржана\n" + +#: elf32-frv.c:6514 +#, c-format +msgid "%s: compiled with %s and linked with modules that use non-pic relocations" +msgstr "%s: преведено са „%s“ и повезано са модулима који користе не-„PIC“ премештања" + +#: elf32-frv.c:6567 elf32-iq2000.c:828 elf32-m32c.c:812 +#, c-format +msgid "%s: compiled with %s and linked with modules compiled with %s" +msgstr "%s: преведено са „%s“ и повезано са модулима који су преведени са „%s“" + +#: elf32-frv.c:6579 +#, 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:6627 elf32-iq2000.c:865 elf32-m32c.c:848 elf32-mt.c:561 +#: elf32-rl78.c:1069 elf32-rx.c:3040 elf64-ppc.c:5839 +#, 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:830 elf32-hppa.c:3592 +msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" +msgstr "%B(%A+0x%lx): не могу да достигнем „%s“, поново преведите са „-ffunction-sections“" + +#: elf32-hppa.c:1268 +msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: премештање „%s“ се не може користити приликом стварања дељеног објекта; поново преведите са „-fPIC“" + +#: elf32-hppa.c:2781 +msgid "%B: duplicate export stub %s" +msgstr "%B: удвостручи окрајак извоза „%s“" + +#: elf32-hppa.c:3427 +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:4279 +msgid "%B(%A+0x%lx): cannot handle %s for %s" +msgstr "%B(%A+0x%lx): не могу да радим са „%s“ за „%s“" + +#: elf32-hppa.c:4598 +msgid ".got section not immediately after .plt section" +msgstr "одељак „.got“ није одмах након одељка „.plt“" + +#. Unknown relocation. +#: elf32-i386.c:380 elf32-m68k.c:353 elf32-ppc.c:2035 elf32-s390.c:345 +#: elf32-tic6x.c:2667 elf64-ppc.c:2427 elf64-s390.c:371 elf64-x86-64.c:281 +msgid "%B: invalid relocation type %d" +msgstr "%B: неисправна врста премештања „%d“" + +#: elf32-i386.c:1394 elf64-x86-64.c:1410 +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:1642 elf32-s390.c:1233 elf32-sh.c:6263 elf32-tilepro.c:1627 +#: elf32-xtensa.c:1176 elf64-s390.c:1166 elfxx-sparc.c:1596 +#: elfxx-tilegx.c:1836 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "%B: „%s“ се приступило и као нормалном и као симболу локалне нити" + +#: elf32-i386.c:2500 elf64-x86-64.c:2582 +msgid "%P: %B: warning: relocation against `%s' in readonly section `%A'.\n" +msgstr "%P: %B: упозорење: премештање наспрам „%s“ у одељку „%A“ који је само за читање.\n" + +#: elf32-i386.c:2740 elf64-x86-64.c:2820 +msgid "%P: %B: warning: relocation in readonly section `%A'.\n" +msgstr "%P: %B: упозорење: премештање у одељку „%A“ који је само за читање.\n" + +#: elf32-i386.c:3207 elf32-tilepro.c:2873 elf64-x86-64.c:3275 +#: elfxx-tilegx.c:3172 /src/binutils-gdb/bfd/elfnn-aarch64.c:4099 +msgid "%B: unrecognized relocation (0x%x) in section `%A'" +msgstr "%B: непознато премештање (0x%x) у одељку „%A“" + +#: elf32-i386.c:3368 elf64-x86-64.c:3380 elfxx-sparc.c:3150 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:3496 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" +msgstr "%B: премештање „%s“ наспрам „STT_GNU_IFUNC“ симбола „%s“ „%s“ не може да одради" + +#: elf32-i386.c:3610 elf64-x86-64.c:3777 +msgid "hidden symbol" +msgstr "скривени симбол" + +#: elf32-i386.c:3613 elf64-x86-64.c:3780 +msgid "internal symbol" +msgstr "унутрашњи симбол" + +#: elf32-i386.c:3616 elf64-x86-64.c:3783 +msgid "protected symbol" +msgstr "заштићени симбол" + +#: elf32-i386.c:3619 elf64-x86-64.c:3786 +msgid "symbol" +msgstr "симбол" + +#: elf32-i386.c:3624 +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:3635 +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-i386.c:4923 elf32-tilepro.c:3923 elf64-x86-64.c:4964 +#: elfxx-tilegx.c:4326 /src/binutils-gdb/bfd/elfnn-aarch64.c:7105 +#, c-format +msgid "discarded output section: `%A'" +msgstr "одбачени одељак излаза: „%A“" + +#: elf32-ip2k.c:857 elf32-ip2k.c:863 elf32-ip2k.c:930 elf32-ip2k.c:936 +msgid "ip2k relaxer: switch table without complete matching relocation information." +msgstr "релаксер „ip2k“: пребацивање табеле без потпуног подударања података о премештању." + +#: elf32-ip2k.c:880 elf32-ip2k.c:963 +msgid "ip2k relaxer: switch table header corrupt." +msgstr "релаксер „ip2k“: оштећено је заглавље табеле пребацивача." + +#: elf32-ip2k.c:1292 +#, c-format +msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "увезивач „ip2k“: недостаје инструкција странице на 0x%08lx (циљ = 0x%08lx)." + +#: elf32-ip2k.c:1308 +#, c-format +msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "увезивач „ip2k“: сувишна инструкција странице на 0x%08lx (циљ = 0x%08lx)." + +#: elf32-iq2000.c:841 elf32-m32c.c:824 +#, 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-lm32.c:698 elf32-nios2.c:2191 +msgid "global pointer relative relocation when _gp not defined" +msgstr "релативно премештање општег показивача када „_gp“ није дефинисано" + +#: elf32-lm32.c:753 elf32-nios2.c:2623 +msgid "global pointer relative address out of range" +msgstr "релативна адреса општег показивача је ван опсега" + +#: elf32-lm32.c:1049 +msgid "internal error: addend should be zero for R_LM32_16_GOT" +msgstr "унутрашња грешка: сабирак треба да буде нула за „R_LM32_16_GOT“" + +#: elf32-m32r.c:1453 +msgid "SDA relocation when _SDA_BASE_ not defined" +msgstr "СДА премештање када „_SDA_BASE_“ није дефинисано" + +#: elf32-m32r.c:3003 +msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" +msgstr "%B: Мета (%s) премештања „%s“ је у погрешном одељку (%A)" + +#: elf32-m32r.c:3529 +msgid "%B: Instruction set mismatch with previous modules" +msgstr "%B: Скуп инструкција се разликује од претходних модула" + +#: elf32-m32r.c:3550 elf32-nds32.c:5636 +#, c-format +msgid "private flags = %lx" +msgstr "приватне заставице = %lx" + +#: elf32-m32r.c:3555 +#, c-format +msgid ": m32r instructions" +msgstr ": инструкције „m32r“" + +#: elf32-m32r.c:3556 +#, c-format +msgid ": m32rx instructions" +msgstr ": инструкције „m32rx“" + +#: elf32-m32r.c:3557 +#, c-format +msgid ": m32r2 instructions" +msgstr ": инструкције „m32r2“" + +#: elf32-m68hc1x.c:1114 +#, c-format +msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" +msgstr "Упућивање на далеки симбол „%s“ употребом погрешног премештања може довести до нетачног извршавања" + +#: elf32-m68hc1x.c:1150 +#, c-format +msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." +msgstr "Адреса „XGATE“ (%lx) није унутар дељене меморије (0xE000-0xFFFF), стога морате ручно да померите адресу, и по могућству да радите са страницом у вашем коду." + +#: elf32-m68hc1x.c:1170 +#, 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:1190 +#, c-format +msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" +msgstr "упута на груписану адресу [%lx:%04lx] у обичном простору адресе на %04lx" + +#: elf32-m68hc1x.c:1237 +#, c-format +msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" +msgstr "Адреса „S12“ (%lx) није унутар дељене меморије (0x2000-0x4000), стога морате ручно да померите адресу у вашем коду" + +#: elf32-m68hc1x.c:1370 +msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" +msgstr "%B: свезујуће датотеке су преведене за целе бројеве од 16 бита (-mshort) а друге за целе бројеве од 32 бита" + +#: elf32-m68hc1x.c:1377 +msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" +msgstr "%B: свезујуће датотеке су преведене за целе бројеве од 32 бита (-fshort-double) а друге за целе бројеве од 64 бита" + +#: elf32-m68hc1x.c:1386 +msgid "%B: linking files compiled for HCS12 with others compiled for HC12" +msgstr "%B: свезујуће датотеке су преведене за „HCS12“ са другима преведеним за „HC12“" + +#: elf32-m68hc1x.c:1402 elf32-ppc.c:4776 elf64-sparc.c:706 elfxx-mips.c:14817 +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:1430 elf32-xgate.c:677 +#, c-format +msgid "[abi=32-bit int, " +msgstr "[аби=32-битни цео број, " + +#: elf32-m68hc1x.c:1432 elf32-xgate.c:679 +#, c-format +msgid "[abi=16-bit int, " +msgstr "[аби=16-битни цео број, " + +#: elf32-m68hc1x.c:1435 elf32-xgate.c:682 +#, c-format +msgid "64-bit double, " +msgstr "64-битни мешовити, " + +#: elf32-m68hc1x.c:1437 elf32-xgate.c:684 +#, c-format +msgid "32-bit double, " +msgstr "32-битни мешовити, " + +#: elf32-m68hc1x.c:1440 +#, c-format +msgid "cpu=HC11]" +msgstr "процесор=HC11]" + +#: elf32-m68hc1x.c:1442 +#, c-format +msgid "cpu=HCS12]" +msgstr "процесор=HCS12]" + +#: elf32-m68hc1x.c:1444 +#, c-format +msgid "cpu=HC12]" +msgstr "процесор=HC12]" + +#: elf32-m68hc1x.c:1447 +#, c-format +msgid " [memory=bank-model]" +msgstr " [меморија=модел-групе]" + +#: elf32-m68hc1x.c:1449 +#, c-format +msgid " [memory=flat]" +msgstr " [меморија=обично]" + +#: elf32-m68hc1x.c:1452 +#, c-format +msgid " [XGATE RAM offsetting]" +msgstr " [XGATE RAM померај]" + +#: elf32-m68k.c:1210 elf32-m68k.c:1211 vms-alpha.c:7207 vms-alpha.c:7222 +msgid "unknown" +msgstr "непознато" + +#: elf32-m68k.c:1674 +msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d" +msgstr "%B: прекорачење „GOT“: Број премештања са 8-битним померајем > %d" + +#: elf32-m68k.c:1680 +msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d" +msgstr "%B: прекорачење „GOT“: Број премештања са 8- или 16-битним померајем > %d" + +#: elf32-m68k.c:3921 +msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): „R_68K_TLS_LE32“ премештање није допуштено у дељеним објектима" + +#: 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" + +#. Pacify gcc -Wall. +#: elf32-mep.c:157 +#, c-format +msgid "mep: no reloc for code %d" +msgstr "mep: нема премештања за код „%d“" + +#: elf32-mep.c:163 +#, c-format +msgid "MeP: howto %d has type %d" +msgstr "MeP: „howto“ „%d“ има врсту „%d“" + +#: elf32-mep.c:632 +msgid "%B and %B are for different cores" +msgstr "„%B“ и „%B“ су за различита језгра" + +#: elf32-mep.c:649 +msgid "%B and %B are for different configurations" +msgstr "„%B“ и „%B“ су за различита подешавања" + +#: elf32-mep.c:686 +#, c-format +msgid "private flags = 0x%lx" +msgstr "приватне заставице = 0x%lx" + +#: elf32-metag.c:1921 +msgid "%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): „R_METAG_TLS_LE/IENONPIC“ премештање није допуштено у дељеним објектима" + +#: elf32-microblaze.c:950 +#, c-format +msgid "%s: unknown relocation type %d" +msgstr "%s: непозната врста премештања „%d“" + +#: elf32-microblaze.c:1076 elf32-microblaze.c:1121 +#, c-format +msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" +msgstr "%s: Мета (%s) премештања „%s“ је у погрешном одељку (%s)" + +#: elf32-microblaze.c:1484 elf32-tilepro.c:3320 elfxx-sparc.c:3526 +#: elfxx-tilegx.c:3729 +msgid "%B: probably compiled without -fPIC?" +msgstr "%B: вероватно је преведено без „-fPIC“?" + +#: elf32-mips.c:1670 elf64-mips.c:2990 elfn32-mips.c:2793 +msgid "literal relocation occurs for an external symbol" +msgstr "дошло је до дословног премештања спољног симбола" + +#: elf32-mips.c:1717 elf32-score.c:570 elf32-score7.c:469 elf64-mips.c:3033 +#: elfn32-mips.c:2834 +msgid "32bits gp relative relocation occurs for an external symbol" +msgstr "дошло је до 32-битног гп релативног премештања спољног симбола" + +#: elf32-msp430.c:801 elf32-msp430.c:1109 +msgid "Try enabling relaxation to avoid relocation truncations" +msgstr "Покушајте да укључите опуштање да бисте избегли скраћивања премештања" + +#: elf32-msp430.c:1317 +msgid "internal error: branch/jump to an odd address detected" +msgstr "унутрашња грешка: откривено је гранање/скок на непарну адресу" + +#: elf32-msp430.c:2221 +msgid "Warning: %B: Unknown MSPABI object attribute %d" +msgstr "Упозорење: %B: „%d“ атрибут „MSPABI“ објекта није познат" + +#: elf32-msp430.c:2312 +msgid "error: %B uses %s instructions but %B uses %s" +msgstr "грешка: „%B“ користи инструкције „%s“ али „%B“ користи „%s“" + +#: elf32-msp430.c:2324 +msgid "error: %B uses the %s code model whereas %B uses the %s code model" +msgstr "грешка: „%B“ користи модел „%s“ кода док „%B“ користи модел „%s“ кода" + +#: elf32-msp430.c:2336 +msgid "error: %B uses the large code model but %B uses MSP430 instructions" +msgstr "грешка: „%B“ користи велики модел кода али „%B“ користи инструкције „MSP430“" + +#: elf32-msp430.c:2346 +msgid "error: %B uses the %s data model whereas %B uses the %s data model" +msgstr "грешка: „%B“ користи модел „%s“ података док „%B“ користи модел „%s“ података" + +#: elf32-msp430.c:2358 +msgid "error: %B uses the small code model but %B uses the %s data model" +msgstr "грешка: „%B“ користи мали модел кода али „%B“ користи модел „%s“ података" + +#: elf32-msp430.c:2369 +msgid "error: %B uses the %s data model but %B only uses MSP430 instructions" +msgstr "грешка: „%B“ користи модел „%s“ података али „%B“ користи инструкције „MSP430“" + +#: elf32-nds32.c:2921 +msgid "error: Can't find symbol: _SDA_BASE_." +msgstr "грешка: Не могу да нађем симбол: _SDA_BASE_." + +#: elf32-nds32.c:4142 +msgid "%B: error: unknown relocation type %d." +msgstr "%B: грешка: непозната врста премештања „%d“." + +#: elf32-nds32.c:4584 +#, c-format +msgid "%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared mode." +msgstr "%s: упозорење: не могу да радим са „R_NDS32_25_ABS_RELA“ у дељеном режиму." + +#: elf32-nds32.c:4716 +msgid "%B: warning: unaligned access to GOT entry." +msgstr "%B: упозорење: непоравнат приступ уносу „GOT“." + +#: elf32-nds32.c:4758 +msgid "%B: warning: relocate SDA_BASE failed." +msgstr "%B: упозорење: није успело премештање „SDA_BASE“." + +#: elf32-nds32.c:4779 +msgid "%B(%A): warning: unaligned small data access of type %d." +msgstr "%B(%A): упозорење: приступ непоравнатим малим подацима врсте „%d“." + +#: elf32-nds32.c:5446 +msgid "%B: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" +msgstr "%B: Величина вектора „ISR“ се разликује од претходних модула: претходна %u бајта; текућа %u бајта" + +#: elf32-nds32.c:5489 +msgid "%B: warning: Endian mismatch with previous modules." +msgstr "%B: упозорење: Крајњост се разликује од претходних модула." + +#: elf32-nds32.c:5499 +msgid "%B: warning: Older version of object file encountered, Please recompile with current tool chain." +msgstr "%B: упозорење: Наишао сам на старије издање датотеке објекта, преведите поново са текућим ланцем алата." + +#: elf32-nds32.c:5577 +msgid "%B: error: ABI mismatch with previous modules." +msgstr "%B: грешка: АБИ се разликује од претходних модула." + +#: elf32-nds32.c:5588 +msgid "%B: error: Instruction set mismatch with previous modules." +msgstr "%B: грешка: Скуп инструкција се разликује од претходних модула." + +#: elf32-nds32.c:5612 +msgid "%B: warning: Incompatible elf-versions %s and %s." +msgstr "%B: упозорење: елф издања %s и %s нису сагласна." + +#: elf32-nds32.c:5642 +#, c-format +msgid ": n1 instructions" +msgstr ": инструкције „n1“" + +#: elf32-nds32.c:5645 +#, c-format +msgid ": n1h instructions" +msgstr ": инструкције „n1h“" + +#: elf32-nds32.c:8147 +msgid "%B: %s\n" +msgstr "%B: %s\n" + +#: elf32-nds32.c:8449 +msgid "%B(%A): warning: relax is suppressed for sections of alignment %d-bytes > 4-byte." +msgstr "%B(%A): упозорење: опуштање је потиснуто за одељке поравнања %d-бајта > 4-бајта." + +#: elf32-nds32.c:8502 +msgid "%B: error: Cannot set _ITB_BASE_" +msgstr "%B: грешка: Не могу да подесим „_ITB_BASE_“" + +#: elf32-nds32.c:11384 +msgid "%B: Nested OMIT_FP in %A." +msgstr "%B: Угнежђено „OMIT_FP“ у „%A“." + +#: elf32-nds32.c:11401 +msgid "%B: Unmatched OMIT_FP in %A." +msgstr "%B: Неодговарајуће „OMIT_FP“ у „%A“." + +#: elf32-nds32.c:13357 +msgid "Linker: cannot init ex9 hash table error \n" +msgstr "Повезивач: не могу да започнем грешку „ex9“ хеш табеле \n" + +#: elf32-nds32.c:13790 elf32-nds32.c:13804 +msgid "Linker: error cannot fixed ex9 relocation \n" +msgstr "Повезивач: грешка не може да поправи „ex9“ премештање \n" + +#: elf32-nds32.c:14015 +#, c-format +msgid "%s: warning: unaligned small data access. For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x." +msgstr "%s: упозорење: није поравнат приступ малих података. За унос: {%d, %d, %d}, адреса = 0x%x, поравнање = 0x%x." + +#: elf32-nds32.c:14047 +msgid "%P%F: failed creating ex9.it %s hash table: %E\n" +msgstr "%P%F: нисам успео да направим „ex9.it %s“ хеш табелу: %E\n" + +#: elf32-nios2.c:2861 +#, c-format +msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n" +msgstr "релативно премештање општег показивача на адреси 0x%08x када „_gp“ није дефинисано\n" + +#: elf32-nios2.c:2878 +#, c-format +msgid "Unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767.\n" +msgstr "Не могу да достигнем „%s“ (на 0x%08x) из општег показивача (на 0x%08x) зато што је померај (%d) изван допуштеног опсега, од -32678 до 32767.\n" + +#: elf32-nios2.c:3392 +msgid "%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): „R_NIOS2_TLS_LE16“ премештање није допуштено у дељеним објектима" + +#: elf32-nios2.c:3520 +msgid "relocation out of range" +msgstr "премештање је ван опсега" + +#: elf32-nios2.c:3530 elf32-tic6x.c:2744 +msgid "dangerous relocation" +msgstr "опасно премештање" + +#: elf32-nios2.c:4529 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "динамичка променљива „%s“ је нулте величине" + +#: elf32-ppc.c:2100 +#, c-format +msgid "generic linker can't handle %s" +msgstr "општи повезивач не може да ради са „%s“" + +#: elf32-ppc.c:2642 +msgid "corrupt %s section in %B" +msgstr "оштећен „%s“ одељак у „%B“" + +#: elf32-ppc.c:2661 +msgid "unable to read in %s section from %B" +msgstr "не могу да читам у одељку „%s“ из „%B“" + +#: elf32-ppc.c:2702 +msgid "warning: unable to set size of %s section in %B" +msgstr "упозорење: не могу да поставим величину одељка „%s“ у „%B“" + +#: elf32-ppc.c:2752 +msgid "failed to allocate space for new APUinfo section." +msgstr "нисам успео да доделим простор за нови одељак „APUinfo“." + +#: elf32-ppc.c:2771 +msgid "failed to compute new APUinfo section." +msgstr "нисам успео да израчунам нови одељак „APUinfo“." + +#: elf32-ppc.c:2774 +msgid "failed to install new APUinfo section." +msgstr "нисам успео да инсталирам нови одељак „APUinfo“." + +#: elf32-ppc.c:3844 +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:4218 +msgid "%P: %H: %s reloc against local symbol\n" +msgstr "%P: %H: „%s“ премештање наспрам локалног симбола\n" + +#: elf32-ppc.c:4299 +msgid "%P: %H: @local call to ifunc %s\n" +msgstr "%P: %H: позив „@local“ за i-функцију „%s“\n" + +#: elf32-ppc.c:4588 elf32-ppc.c:4603 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "Упозорење: „%B“ користи хардверски покретни зарез, „%B“ користи софтверски покретни зарез" + +#: elf32-ppc.c:4591 elf32-ppc.c:4595 +msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" +msgstr "Упозорење: „%B“ користи хардверски покретни зарез двоструке тачности, „%B“ користи хардверски покретни зарез једне тачности" + +#: elf32-ppc.c:4599 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "Упозорење: „%B“ користи софтверски покретни зарез, „%B“ користи хардверски покретни зарез једне тачности" + +#: elf32-ppc.c:4606 elf32-ppc.c:4610 +msgid "Warning: %B uses unknown floating point ABI %d" +msgstr "Упозорење: „%B“ користи непознати АБИ „%d“ покретног зареза" + +#: elf32-ppc.c:4652 elf32-ppc.c:4656 +msgid "Warning: %B uses unknown vector ABI %d" +msgstr "Упозорење: „%B“ користи непознати АБИ „%d“ вектора" + +#: elf32-ppc.c:4660 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +msgstr "Упозорење: „%B“ користи АБИ „%s“ вектора, „%B“ користи „%s“" + +#: elf32-ppc.c:4677 elf32-ppc.c:4680 +msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory" +msgstr "Упозорење: „%B“ користи „r3/r4“ за мале резултате структуре, „%B“ користи меморију" + +#: elf32-ppc.c:4683 elf32-ppc.c:4687 +msgid "Warning: %B uses unknown small structure return convention %d" +msgstr "Упозорење: „%B“ користи непознати одговор малог резултата структуре „%d“" + +#: elf32-ppc.c:4741 +msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" +msgstr "%B: преведено са „-mrelocatable“ и повезано са модулима који су преведени уобичајеним путем" + +#: elf32-ppc.c:4749 +msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" +msgstr "%B: преведено уобичајеним путем и повезано са модулима који су преведени са „-mrelocatable“" + +#: elf32-ppc.c:4872 +msgid "%P: bss-plt forced due to %B\n" +msgstr "%P: „bss-plt“ је присиљено због „%B“\n" + +#: elf32-ppc.c:4875 +msgid "%P: bss-plt forced by profiling\n" +msgstr "%P: „bss-plt“ је присиљено профилисањем\n" + +#. 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 optimization. +#: elf32-ppc.c:5369 elf64-ppc.c:8371 +msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" +msgstr "Аргумент „%H“ је изгубио „__tls_get_addr“, ТЛС оптимизација је искључена\n" + +#: elf32-ppc.c:7927 +msgid "%P: %B: unknown relocation type %d for symbol %s\n" +msgstr "%P: %B: непозната врста премештања „%d“ за симбол „%s“\n" + +#: elf32-ppc.c:8191 +msgid "%P: %H: non-zero addend on %s reloc against `%s'\n" +msgstr "%P: %H: не нулти сабирак на „%s“ премештању наспрам „%s“\n" + +#: elf32-ppc.c:8389 +msgid "%P: %H: relocation %s for indirect function %s unsupported\n" +msgstr "%P: %H: „%s“ премештање за индиректну функцију „%s“ није подржано\n" + +#: elf32-ppc.c:8646 elf32-ppc.c:8676 elf32-ppc.c:8767 +msgid "%P: %B: the target (%s) of a %s relocation is in the wrong output section (%s)\n" +msgstr "%P: %B: мета (%s) премештања „%s“ је у погрешном излазном одељку (%s)\n" + +#: elf32-ppc.c:8854 +msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" +msgstr "%B: мета (%s) премештања „%s“ је у погрешном излазном одељку (%s)" + +#: elf32-ppc.c:8958 +msgid "%P: %B: relocation %s is not yet supported for symbol %s\n" +msgstr "%P: %B: премештање „%s“ још није подржано за симбол „%s“\n" + +#: elf32-ppc.c:9038 +msgid "%P: %H: error: %s against `%s' not a multiple of %u\n" +msgstr "%P: %H: грешка: „%s“ наспрам „%s“ није производ „%u“\n" + +#: elf32-ppc.c:9067 +msgid "%P: %H: unresolvable %s relocation against symbol `%s'\n" +msgstr "%P: %H: нерешиво „%s“ премештање наспрам симбола „%s“\n" + +#: elf32-ppc.c:9114 +msgid "%P: %H: %s reloc against `%s': error %d\n" +msgstr "%P: %H: „%s“ премештање наспрам „%s“: грешка %d\n" + +#: elf32-ppc.c:9750 +msgid "%P: %s not defined in linker created %s\n" +msgstr "%P: „%s“ није дефинисано у повезивачу створеном „%s“\n" + +#: elf32-rl78.c:784 +msgid "Warning: RL78_SYM reloc with an unknown symbol" +msgstr "Упозорење: „RL78_SYM“ премештање са непознатим симболом" + +#: elf32-rl78.c:952 elf32-rx.c:1324 +msgid "%B(%A): error: call to undefined function '%s'" +msgstr "%B(%A): грешка: позив за недефинисану функцију „%s“" + +#: elf32-rl78.c:966 elf32-rx.c:1338 +msgid "%B(%A): warning: unaligned access to symbol '%s' in the small data area" +msgstr "%B(%A): упозорење: непоравнати приступ ка симболу „%s“ области малих података" + +#: elf32-rl78.c:970 elf32-rx.c:1342 +msgid "%B(%A): internal error: out of range error" +msgstr "%B(%A): унутрашња грешка: изван опсега" + +#: elf32-rl78.c:974 elf32-rx.c:1346 +msgid "%B(%A): internal error: unsupported relocation error" +msgstr "%B(%A): унутрашња грешка: премештање није подржано" + +#: elf32-rl78.c:978 elf32-rx.c:1350 +msgid "%B(%A): internal error: dangerous relocation" +msgstr "%B(%A): унутрашња грешка: опасно премештање" + +#: elf32-rl78.c:982 elf32-rx.c:1354 +msgid "%B(%A): internal error: unknown error" +msgstr "%B(%A): унутрашња грешка: непозната грешка" + +#: elf32-rl78.c:1043 +msgid "RL78/G10 ABI conflict: cannot link G10 and non-G10 objects together" +msgstr "„ABI RL78/G10“ сукоб: не могу да повежем заједно Г10 и не-Г10 објекте" + +#: elf32-rl78.c:1046 elf32-rl78.c:1049 +#, c-format +msgid "- %s is G10, %s is not" +msgstr "— „%s“ је Г10, „%s“ није" + +#: elf32-rl78.c:1072 +#, c-format +msgid " [G10]" +msgstr " [Г10]" + +#: elf32-rx.c:563 +msgid "%B:%A: Warning: deprecated Red Hat reloc " +msgstr "%B:%A: Упозорење: застарело премештање Ред Хета " + +#. Check for unsafe relocs in PID mode. These are any relocs where +#. an absolute address is being computed. There are special cases +#. for relocs against symbols that are known to be referenced in +#. crt0.o before the PID base address register has been initialised. +#: elf32-rx.c:581 +msgid "%B(%A): unsafe PID relocation %s at 0x%08lx (against %s in %s)" +msgstr "%B(%A): несигурно ПИД премештање „%s“ на 0x%08lx (наспрам „%s“ у „%s“)" + +#: elf32-rx.c:1157 +msgid "Warning: RX_SYM reloc with an unknown symbol" +msgstr "Упозорење: „RX_SYM“ премештање са непознатим симболом" + +#: elf32-s390.c:2292 elf64-s390.c:2244 +msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" +msgstr "%B(%A+0x%lx): неисправна инструкција за ТЛС премештање „%s“" + +#: elf32-score.c:1520 elf32-score7.c:1379 elfxx-mips.c:3642 +msgid "not enough GOT space for local GOT entries" +msgstr "нема довољно „GOT“ простора за месне уносе „GOT“" + +#: elf32-score.c:2742 +msgid "address not word align" +msgstr "адреса није поравната по речи" + +#: elf32-score.c:2827 elf32-score7.c:2631 +#, c-format +msgid "%s: Malformed reloc detected for section %s" +msgstr "%s: Откривено је лоше премештање за одељак „%s“" + +#: elf32-score.c:2882 elf32-score7.c:2686 +msgid "%B: CALL15 reloc at 0x%lx not against global symbol" +msgstr "%B: „CALL15“ премештање на 0x%lx није наспрам општег симбола" + +#: elf32-score.c:4007 elf32-score7.c:3811 +#, c-format +msgid " [pic]" +msgstr " [пик]" + +#: elf32-score.c:4011 elf32-score7.c:3815 +#, c-format +msgid " [fix dep]" +msgstr " [фикс дуб]" + +#: elf32-score.c:4053 elf32-score7.c:3857 +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: директива УВЕЗИ КАО за „%s“ засењује претходно УВЕЗИ КАО" + +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" +msgstr "%B: Непозната наредба „.directive“: %s" + +#: elf32-sh-symbian.c:500 +msgid "%B: Failed to add renamed symbol %s" +msgstr "%B: Нисам успео да додам преименовани симбол „%s“" + +#: elf32-sh.c:569 +msgid "%B: 0x%lx: warning: bad R_SH_USES offset" +msgstr "%B: 0x%lx: упозорење: лош померај „R_SH_USES“" + +#: elf32-sh.c:581 +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:598 +msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" +msgstr "%B: 0x%lx: упозорење: лош померај учитавања „R_SH_USES“" + +#: elf32-sh.c:613 +msgid "%B: 0x%lx: warning: could not find expected reloc" +msgstr "%B: 0x%lx: упозорење: не могу да нађем очекивано премештање" + +#: elf32-sh.c:641 +msgid "%B: 0x%lx: warning: symbol in unexpected section" +msgstr "%B: 0x%lx: упозорење: симбол је у неочекиваном одељку" + +#: elf32-sh.c:767 +msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" +msgstr "%B: 0x%lx: упозорење: не могу да нађем очекивано премештање „COUNT“" + +#: elf32-sh.c:776 +msgid "%B: 0x%lx: warning: bad count" +msgstr "%B: 0x%lx: упозорење: лош број" + +#: elf32-sh.c:1180 elf32-sh.c:1550 +msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" +msgstr "%B: 0x%lx: кобна грешка: прекорачење премештања приликом опуштања" + +#: elf32-sh.c:3939 elf64-sh64.c:1514 +msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" +msgstr "Неочекивано „STO_SH5_ISA32“ на месном симболу није одрађено" + +#: elf32-sh.c:4190 +msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" +msgstr "%B: 0x%lx: кобна грешка: непоравнат циљ гране за премештање подршке опуштања" + +#: elf32-sh.c:4223 elf32-sh.c:4238 +msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" +msgstr "%B: 0x%lx: кобна грешка: непоравнато премештање „%s“ 0x%lx" + +#: elf32-sh.c:4252 +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:4266 +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:4410 elf32-sh.c:4886 +msgid "%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section" +msgstr "%B(%A+0x%lx): не могу да унесем исправке у „%s“ у одељку само за читање" + +#: elf32-sh.c:4993 +msgid "%B(%A+0x%lx): %s relocation against external symbol \"%s\"" +msgstr "%B(%A+0x%lx): „%s“ премештање наспрам спољног симбола „%s“" + +#: elf32-sh.c:5466 +#, c-format +msgid "%X%C: relocation to \"%s\" references a different segment\n" +msgstr "%X%C: премештање у „%s“ ствара упуту другог сегмента\n" + +#: elf32-sh.c:5472 +#, c-format +msgid "%C: warning: relocation to \"%s\" references a different segment\n" +msgstr "%C: упозорење: премештање у „%s“ ствара упуту другог сегмента\n" + +#: elf32-sh.c:6254 elf32-sh.c:6337 +msgid "%B: `%s' accessed both as normal and FDPIC symbol" +msgstr "%B: „%s“ се приступило и као нормалном и као симболу „FDPIC“" + +#: elf32-sh.c:6259 elf32-sh.c:6341 +msgid "%B: `%s' accessed both as FDPIC and thread local symbol" +msgstr "%B: „%s“ се приступило и као „FDPIC“-у и као симболу локалне нити" + +#: elf32-sh.c:6289 +msgid "%B: Function descriptor relocation with non-zero addend" +msgstr "%B: Премештање описника функције са не-нултим сабирком" + +#: elf32-sh.c:6525 elf64-alpha.c:4661 +msgid "%B: TLS local exec code cannot be linked into shared objects" +msgstr "%B: ТЛС месни извршни код не може бити повезан у дељеним објектима" + +#: elf32-sh64.c:224 elf64-sh64.c:2318 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" +msgstr "%s: преведен је као 32-битни објекат а „%s“ је 64-битни" + +#: elf32-sh64.c:227 elf64-sh64.c:2321 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" +msgstr "%s: преведен је као 64-битни објекат а „%s“ је 32-битни" + +#: elf32-sh64.c:229 elf64-sh64.c:2323 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "%s: величина објекта не одговара величини циља „%s“" + +#: elf32-sh64.c:452 elf64-sh64.c:2839 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "%s: наишао сам на симбол натписа датума у улазу" + +#: elf32-sh64.c:529 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "ПТБ не одговара: адреса „SHmedia“ (бит 0 == 1)" + +#: elf32-sh64.c:532 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "ПТА не одговара: адреса „SHcompact“ (бит 0 == 0)" + +#: elf32-sh64.c:550 +#, c-format +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "%s: ГАС грешка: неочекивано ПТБ „insn“ са „R_SH_PT_16“" + +#: elf32-sh64.c:599 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "%B: грешка: непоравната врста премештања „%d“ на %08x премештања „%p“\n" + +#: elf32-sh64.c:675 +#, c-format +msgid "%s: could not write out added .cranges entries" +msgstr "%s: не могу да запишем додате „.cranges“ уносе" + +#: elf32-sh64.c:735 +#, c-format +msgid "%s: could not write out sorted .cranges entries" +msgstr "%s: не могу да запишем поређане „.cranges“ уносе" + +#: elf32-sparc.c:90 +msgid "%B: compiled for a 64 bit system and target is 32 bit" +msgstr "%B: преведено за 64-битни систем а циљ је 32-битни" + +#: elf32-sparc.c:103 +msgid "%B: linking little endian files with big endian files" +msgstr "%B: повезујем датотеке мале крајњости са датотекама велике крајњости" + +#: elf32-spu.c:716 +msgid "%X%P: overlay section %A does not start on a cache line.\n" +msgstr "%X%P: одељак преклапања „%A“ не почиње у реду оставе.\n" + +#: elf32-spu.c:724 +msgid "%X%P: overlay section %A is larger than a cache line.\n" +msgstr "%X%P: одељак преклапања „%A“ је већи од реда оставе.\n" + +#: elf32-spu.c:744 +msgid "%X%P: overlay section %A is not in cache area.\n" +msgstr "%X%P: одељак преклапања „%A“ није у реду оставе.\n" + +#: elf32-spu.c:784 +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:1008 +msgid "warning: call to non-function symbol %s defined in %B" +msgstr "упозорење: позив не-функцијском симболу „%s“ је дефинисан у „%B“" + +#: elf32-spu.c:1358 +msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" +msgstr "%A:0x%v „lrlive .brinfo“ (%u) се разликује од анализе (%u)\n" + +#: elf32-spu.c:1877 +msgid "%B is not allowed to define %s" +msgstr "„%B“ нема дозволу да дефинише „%s“" + +#: elf32-spu.c:1885 +#, c-format +msgid "you are not allowed to define %s in a script" +msgstr "ви немате дозволу да дефинишете „%s“ у скрипти" + +#: elf32-spu.c:1919 +#, c-format +msgid "%s in overlay section" +msgstr "„%s“ у одељку преклапања" + +#: elf32-spu.c:1948 +msgid "overlay stub relocation overflow" +msgstr "прекорачење премештања окрајка прекривања" + +#: elf32-spu.c:1957 +msgid "stubs don't match calculated size" +msgstr "окрајци не одговарају израчунатој величини" + +#: elf32-spu.c:2539 +#, c-format +msgid "warning: %s overlaps %s\n" +msgstr "упозорење: „%s“ преклапа „%s“\n" + +#: elf32-spu.c:2555 +#, c-format +msgid "warning: %s exceeds section size\n" +msgstr "упозорење: „%s“ превазилази величину одељка\n" + +#: elf32-spu.c:2586 +msgid "%A:0x%v not found in function table\n" +msgstr "„%A:0x%v“ нисам нашао у табели функције\n" + +#: elf32-spu.c:2726 +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:3294 +#, c-format +msgid "Stack analysis will ignore the call from %s to %s\n" +msgstr "Анализа спремника ће занемарити позив од „%s“ до „%s“\n" + +#: elf32-spu.c:3985 +msgid " %s: 0x%v\n" +msgstr " %s: 0x%v\n" + +#: elf32-spu.c:3986 +msgid "%s: 0x%v 0x%v\n" +msgstr "%s: 0x%v 0x%v\n" + +#: elf32-spu.c:3991 +msgid " calls:\n" +msgstr " позиви:\n" + +#: elf32-spu.c:3999 +#, 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“ је удвостручено у „%s“\n" + +#: elf32-spu.c:4308 +#, c-format +msgid "%s duplicated\n" +msgstr "„%s“ је удвостручено\n" + +#: elf32-spu.c:4315 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "извините, нема подршке за удвостручене датотеке објекта у скрипти само-преклапања\n" + +#: elf32-spu.c:4356 +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:4511 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "„%B:%A%s“ превазилази величину преклапања\n" + +#: elf32-spu.c:4673 +msgid "Stack size for call graph root nodes.\n" +msgstr "Величина спремника за позив чворова корена графика.\n" + +#: elf32-spu.c:4674 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" +msgstr "" +"\n" +"Величина спремника за функције. Напомене: „*“ највећи спремник, „t“ позив остатка\n" + +#: elf32-spu.c:4684 +msgid "Maximum stack required is 0x%v\n" +msgstr "Највећи потребан спремник је 0x%v\n" + +#: elf32-spu.c:4775 +msgid "fatal error while creating .fixup" +msgstr "кобна грешка приликом стварања „.fixup“-а" + +#: elf32-spu.c:5005 +msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%s+0x%lx): нерешиво „%s“ премештање наспрам симбола „%s“" + +#: elf32-tic6x.c:1600 +msgid "warning: generating a shared library containing non-PIC code" +msgstr "упозорење: стварам дељену библиотеку која садржи не-ПИЦ код" + +#: elf32-tic6x.c:1605 +msgid "warning: generating a shared library containing non-PID code" +msgstr "упозорење: стварам дељену библиотеку која садржи не-ПИД код" + +#: elf32-tic6x.c:2524 +msgid "%B: SB-relative relocation but __c6xabi_DSBT_BASE not defined" +msgstr "%B: премештање се односи на „SB“ али „__c6xabi_DSBT_BASE“ није дефинисано" + +#: elf32-tic6x.c:3648 +msgid "%B: error: unknown mandatory EABI object attribute %d" +msgstr "%B: грешка: обавезан „%d“ атрибут „EABI“ објекта није познат" + +#: elf32-tic6x.c:3656 +msgid "%B: warning: unknown EABI object attribute %d" +msgstr "%B: упозорење: „%d“ атрибут „EABI“ објекта није познат" + +#: elf32-tic6x.c:3768 elf32-tic6x.c:3776 +msgid "error: %B requires more stack alignment than %B preserves" +msgstr "грешка: „%B“ захтева веће поравнање спремника него што „%B“ садржи" + +#: elf32-tic6x.c:3786 elf32-tic6x.c:3795 +msgid "error: unknown Tag_ABI_array_object_alignment value in %B" +msgstr "грешка: непозната вредност „Tag_ABI_array_object_alignment“ у „%B“" + +#: elf32-tic6x.c:3804 elf32-tic6x.c:3813 +msgid "error: unknown Tag_ABI_array_object_align_expected value in %B" +msgstr "грешка: непозната вредност „Tag_ABI_array_object_align_expected“ у „%B“" + +#: elf32-tic6x.c:3821 elf32-tic6x.c:3828 +msgid "error: %B requires more array alignment than %B preserves" +msgstr "грешка: „%B“ захтева веће поравнање низа него што „%B“ садржи" + +#: elf32-tic6x.c:3850 +msgid "warning: %B and %B differ in wchar_t size" +msgstr "упозорење: „%B“ и „%B“ имају различите „wchar_t“" + +#: elf32-tic6x.c:3868 +msgid "warning: %B and %B differ in whether code is compiled for DSBT" +msgstr "упозорење: „%B“ и „%B“ се разликују по томе да ли је код преведен за „DSBT“" + +#: elf32-v850.c:157 +#, c-format +msgid "Variable `%s' cannot occupy in multiple small data regions" +msgstr "Вредност „%s“ не може да заузме неколико области малих података" + +#: elf32-v850.c:160 +#, c-format +msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" +msgstr "Вредност „%s“ може бити само у једном од области малих, нултих и мајушних података" + +#: elf32-v850.c:163 +#, c-format +msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" +msgstr "Вредност „%s“ не може бити истовремено у областима малих и нултих података" + +#: elf32-v850.c:166 +#, c-format +msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" +msgstr "Вредност „%s“ не може бити истовремено у областима малих и мајушних података" + +#: elf32-v850.c:169 +#, c-format +msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" +msgstr "Вредност „%s“ не може бити истовремено у областима нултих и мајушних података" + +#: elf32-v850.c:467 +msgid "FAILED to find previous HI16 reloc" +msgstr "НИСАМ УСПЕО да нађем претходно „HI16“ премештање" + +#: elf32-v850.c:2293 +msgid "could not locate special linker symbol __gp" +msgstr "не могу да нађем нарочит „__gp“ симбол повезивача" + +#: elf32-v850.c:2297 +msgid "could not locate special linker symbol __ep" +msgstr "не могу да нађем нарочит „__ep“ симбол повезивача" + +#: elf32-v850.c:2301 +msgid "could not locate special linker symbol __ctbp" +msgstr "не могу да нађем нарочит „__ctbp“ симбол повезивача" + +#: elf32-v850.c:2471 elf32-v850.c:2534 +msgid "%B: Architecture mismatch with previous modules" +msgstr "%B: Архитектура се разликује од претходних модула" + +#: elf32-v850.c:2478 +msgid "%B: Alignment mismatch with previous modules" +msgstr "%B: Поравнање се разликује од претходних модула" + +#. xgettext:c-format. +#: elf32-v850.c:2553 +#, c-format +msgid "private flags = %lx: " +msgstr "приватне заставице = %lx: " + +#: elf32-v850.c:2558 +#, c-format +msgid "unknown v850 architecture" +msgstr "непозната архитектура „v850“" + +#: elf32-v850.c:2560 +#, c-format +msgid "v850 E3 architecture" +msgstr "архитектура „v850 E3“" + +#: elf32-v850.c:2562 elf32-v850.c:2572 +#, c-format +msgid "v850 architecture" +msgstr "архитектура „v850“" + +#: elf32-v850.c:2565 +#, c-format +msgid ", 8-byte data alignment" +msgstr ", 8-битно поравнање података" + +#: elf32-v850.c:2573 +#, c-format +msgid "v850e architecture" +msgstr "архитектура „v850e“" + +#: elf32-v850.c:2574 +#, c-format +msgid "v850e1 architecture" +msgstr "архитектура „v850e1“" + +#: elf32-v850.c:2575 +#, c-format +msgid "v850e2 architecture" +msgstr "архитектура „v850e2“" + +#: elf32-v850.c:2576 +#, c-format +msgid "v850e2v3 architecture" +msgstr "архитектура „v850e2v3“" + +#: elf32-v850.c:2577 +#, c-format +msgid "v850e3v5 architecture" +msgstr "архитектура „v850e3v5“" + +#: elf32-vax.c:532 +#, c-format +msgid " [nonpic]" +msgstr " [не-пиц]" + +#: elf32-vax.c:535 +#, c-format +msgid " [d-float]" +msgstr " [d-покретни зарез]" + +#: elf32-vax.c:538 +#, c-format +msgid " [g-float]" +msgstr " [g-покретни зарез]" + +#: elf32-vax.c:656 +#, 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:1543 +#, c-format +msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" +msgstr "%s: упозорење: „PLT“ сабирак „%d“-а за „%s“ из одељка „%s“ је занемарен" + +#: elf32-vax.c:1668 +#, c-format +msgid "%s: warning: %s relocation against symbol `%s' from %s section" +msgstr "%s: упозорење: „%s“ премештање наспрам симбола „%s“ из одељка „%s“" + +#: elf32-vax.c:1674 +#, c-format +msgid "%s: warning: %s relocation to 0x%x from %s section" +msgstr "%s: упозорење: „%s“ премештање у 0x%x из одељка „%s“" + +#: elf32-xgate.c:686 +#, c-format +msgid "cpu=XGATE]" +msgstr "процесор=XGATE]" + +#: elf32-xgate.c:688 +#, c-format +msgid "error reading cpu type from elf private data" +msgstr "грешка читања врсте процесора из личних података елф-а" + +#: elf32-xstormy16.c:455 elf64-ia64-vms.c:2072 elf32-ia64.c:2330 +#: elf64-ia64.c:2330 +msgid "non-zero addend in @fptr reloc" +msgstr "не-нулти сабирак у „@fptr“ премештању" + +#: elf32-xtensa.c:908 +msgid "%B(%A): invalid property table" +msgstr "%B(%A): неисправна табела власништва" + +#: elf32-xtensa.c:2774 +msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" +msgstr "%B(%A+0x%lx): померај премештања је ван опсега (величина=0x%x)" + +#: elf32-xtensa.c:2853 elf32-xtensa.c:2974 +msgid "dynamic relocation in read-only section" +msgstr "динамичко премештање у одељку само за читање" + +#: elf32-xtensa.c:2950 +msgid "TLS relocation invalid without dynamic sections" +msgstr "ТЛС премештање је неисправно без динамичких одељака" + +#: elf32-xtensa.c:3169 +msgid "internal inconsistency in size of .got.loc section" +msgstr "унутрашња недоследност у величини одељка „.got.loc“" + +#: elf32-xtensa.c:3482 +msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" +msgstr "%B: несагласна врста машине. Излаз је 0x%x, а улаз 0x%x" + +#: elf32-xtensa.c:4713 elf32-xtensa.c:4721 +msgid "Attempt to convert L32R/CALLX to CALL failed" +msgstr "Покушај претварања „L32R/CALLX“ у „CALL“ није успело" + +#: elf32-xtensa.c:6330 elf32-xtensa.c:6406 elf32-xtensa.c:7522 +msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" +msgstr "%B(%A+0x%lx): не могу да декодирам инструкцију; вероватно је подешавање погрешно" + +#: elf32-xtensa.c:7262 +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:9022 +msgid "invalid relocation address" +msgstr "неисправна адреса премештања" + +#: elf32-xtensa.c:9071 +msgid "overflow after relaxation" +msgstr "прекорачење након опуштања" + +#: elf32-xtensa.c:10203 +msgid "%B(%A+0x%lx): unexpected fix for %s relocation" +msgstr "%B(%A+0x%lx): неочекивана исправка за „%s“ премештање" + +#: elf64-alpha.c:474 +msgid "GPDISP relocation did not find ldah and lda instructions" +msgstr "„GPDISP“ премештање није нашло инструкције „ldah“ и „lda“" + +#: elf64-alpha.c:2503 +msgid "%B: .got subsegment exceeds 64K (size %d)" +msgstr "%B: под-подеок „.got“ превазилази 64K (величина је %d)" + +#: elf64-alpha.c:4396 elf64-alpha.c:4408 +msgid "%B: gp-relative relocation against dynamic symbol %s" +msgstr "%B: „gp“-односно премештање наспрам динамичког симбола „%s“" + +#: elf64-alpha.c:4434 elf64-alpha.c:4574 +msgid "%B: pc-relative relocation against dynamic symbol %s" +msgstr "%B: „pc“-односно премештање наспрам динамичког симбола „%s“" + +#: elf64-alpha.c:4462 +msgid "%B: change in gp: BRSGP %s" +msgstr "%B: измена у „gp“-у: BRSGP %s" + +#: elf64-alpha.c:4487 +msgid "" +msgstr "<непознато>" + +#: elf64-alpha.c:4492 +msgid "%B: !samegp reloc against symbol without .prologue: %s" +msgstr "%B: „!samegp“ премештање наспрам симбола без „.prologue“-а: %s" + +#: elf64-alpha.c:4549 +msgid "%B: unhandled dynamic relocation against %s" +msgstr "%B: необрађено динамичко премештање наспрам „%s“" + +#: elf64-alpha.c:4581 +msgid "%B: pc-relative relocation against undefined weak symbol %s" +msgstr "%B: „pc“-односно премештање наспрам недефинисаног слабог симбола „%s“" + +#: elf64-alpha.c:4645 +msgid "%B: dtp-relative relocation against dynamic symbol %s" +msgstr "%B: „dtp“-односно премештање наспрам динамичког симбола „%s“" + +#: elf64-alpha.c:4668 +msgid "%B: tp-relative relocation against dynamic symbol %s" +msgstr "%B: „tp“-односно премештање наспрам динамичког симбола „%s“" + +#: elf64-hppa.c:2084 +#, c-format +msgid "stub entry for %s cannot load .plt, dp offset = %ld" +msgstr "унос окрајка за „%s“ не може да учита „.plt“, померај „dp“ = %ld" + +#: elf64-hppa.c:3280 +msgid "%B(%A+0x%" +msgstr "%B(%A+0x%" + +#: elf64-ia64-vms.c:587 elf32-ia64.c:619 elf64-ia64.c:619 +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“ или индиректну грану." + +#: elf64-ia64-vms.c:2027 elf32-ia64.c:2278 elf64-ia64.c:2278 +msgid "@pltoff reloc against local symbol" +msgstr "„@pltoff“ премештање наспрам локалног симбола" + +#: elf64-ia64-vms.c:3279 elf32-ia64.c:3684 elf64-ia64.c:3684 +#, c-format +msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" +msgstr "%s: прекорачење сегмента кратких података (0x%lx >= 0x400000)" + +#: elf64-ia64-vms.c:3290 elf32-ia64.c:3695 elf64-ia64.c:3695 +#, c-format +msgid "%s: __gp does not cover short data segment" +msgstr "%s: „__gp“ не покрива сегмент кратких података" + +#: elf64-ia64-vms.c:3555 elf32-ia64.c:3962 elf64-ia64.c:3962 +msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" +msgstr "%B: не-пик код са „imm“ премештањем наспрам динамичког симбола „%s“" + +#: elf64-ia64-vms.c:3617 elf32-ia64.c:4029 elf64-ia64.c:4029 +msgid "%B: @gprel relocation against dynamic symbol %s" +msgstr "%B: „@gprel“-односно премештање наспрам динамичког симбола „%s“" + +#: elf64-ia64-vms.c:3676 elf32-ia64.c:4092 elf64-ia64.c:4092 +msgid "%B: linking non-pic code in a position independent executable" +msgstr "%B: повезујем не-пик код у извршном независном од положаја" + +#: elf64-ia64-vms.c:3777 elf32-ia64.c:4229 elf64-ia64.c:4229 +msgid "%B: @internal branch to dynamic symbol %s" +msgstr "%B: „@internal“ грана ка динамичком симболу „%s“" + +#: elf64-ia64-vms.c:3779 elf32-ia64.c:4231 elf64-ia64.c:4231 +msgid "%B: speculation fixup to dynamic symbol %s" +msgstr "%B: разматрам исправку динамичког симбола „%s“" + +#: elf64-ia64-vms.c:3781 elf32-ia64.c:4233 elf64-ia64.c:4233 +msgid "%B: @pcrel relocation against dynamic symbol %s" +msgstr "%B: „@pcrel“-односно премештање наспрам динамичког симбола „%s“" + +#: elf64-ia64-vms.c:3905 elf32-ia64.c:4430 elf64-ia64.c:4430 +msgid "unsupported reloc" +msgstr "неподржано премештање" + +#: elf64-ia64-vms.c:3942 elf32-ia64.c:4468 elf64-ia64.c:4468 +msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." +msgstr "%B: недостаје ТЛС одељак за „%s“ премештање наспрам „%s“ на 0x%lx у одељку „%A“." + +#: elf64-ia64-vms.c:3957 elf32-ia64.c:4483 elf64-ia64.c:4483 +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)." + +#: elf64-ia64-vms.c:4246 elf32-ia64.c:4745 elf64-ia64.c:4745 +msgid "%B: linking trap-on-NULL-dereference with non-trapping files" +msgstr "%B: повезујем захват-на-НИШТАВНОЈ-дереференциса не-захватним датотекама" + +#: elf64-ia64-vms.c:4255 elf32-ia64.c:4754 elf64-ia64.c:4754 +msgid "%B: linking big-endian files with little-endian files" +msgstr "%B: повезујем датотеке велике крајњости са датотекама мале крајњости" + +#: elf64-ia64-vms.c:4264 elf32-ia64.c:4763 elf64-ia64.c:4763 +msgid "%B: linking 64-bit files with 32-bit files" +msgstr "%B: повезујем 64-битне датотеке са 32-битним датотекама" + +#: elf64-ia64-vms.c:4273 elf32-ia64.c:4772 elf64-ia64.c:4772 +msgid "%B: linking constant-gp files with non-constant-gp files" +msgstr "%B: повезујем датотеке „константног-гп“-а са датотекама „не-константног-гп“-а" + +#: elf64-ia64-vms.c:4283 elf32-ia64.c:4782 elf64-ia64.c:4782 +msgid "%B: linking auto-pic files with non-auto-pic files" +msgstr "%B: повезујем датотеке „ауто-пик“-а са датотекама „не-ауто-пик“-а" + +#: elf64-ia64-vms.c:5125 elflink.c:4299 +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“" + +#: elf64-ia64-vms.c:5131 elflink.c:4305 +msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" +msgstr "Упозорење: „%u“ поравнање симбола „%s“ у „%B“ је мање од „%u“ у „%B“" + +#: elf64-ia64-vms.c:5146 elflink.c:4321 +msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" +msgstr "Упозорење: величина симбола „%s“ је измењена из „%lu“ у „%B“ у „%lu“ у „%B“" + +#: elf64-mmix.c:986 +msgid "" +"invalid input relocation when producing non-ELF, non-mmo format output.\n" +" Please use the objcopy program to convert from ELF or mmo,\n" +" or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\"" +msgstr "" +"неисправно премештање улаза приликом давања не-„ELF“, не-„mmo“ записа излаза.\n" +" Користите програм „objcopy“ да претворите из „ELF“-а или „mmo“-а,\n" +" или саставите користећи „-no-expand“ (за гцц, „-Wa,-no-expand“)" + +#: elf64-mmix.c:1170 +msgid "" +"invalid input relocation when producing non-ELF, non-mmo format output.\n" +" Please use the objcopy program to convert from ELF or mmo,\n" +" or compile using the gcc-option \"-mno-base-addresses\"." +msgstr "" +"неисправно премештање улаза приликом давања не-„ELF“, не-„mmo“ записа излаза.\n" +" Користите програм „objcopy“ да претворите из „ELF“-а или „mmo“-а,\n" +" или преведите користећи гцц-опцију „-mno-base-addresses“." + +#: elf64-mmix.c:1196 +#, 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:1739 +#, 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:2198 +#, 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:2252 +msgid "Register section has contents\n" +msgstr "Одељак регистра има садржај\n" + +#: elf64-mmix.c:2441 +#, c-format +msgid "" +"Internal inconsistency: remaining %u != max %u.\n" +" Please report this bug." +msgstr "" +"Унутрашња недоследност: преостаје %u != најв. %u.\n" +" Пријавите ову грешку." + +#: elf64-ppc.c:4463 +msgid "%P: %B: cannot create stub entry %s\n" +msgstr "%P: %B: не могу да створим унос окрајка „%s“\n" + +#: elf64-ppc.c:4810 +msgid "%P: symbol '%s' has invalid st_other for ABI version 1\n" +msgstr "%P: симбол „%s“ има неисправан „st_other“ за АБИ издање 1\n" + +#: elf64-ppc.c:5170 +msgid "%P: .opd not allowed in ABI version %d\n" +msgstr "%P: „.opd“ није допуштен у АБИ-ју издање %d\n" + +#: elf64-ppc.c:5809 +msgid "%B uses unknown e_flags 0x%lx" +msgstr "„%B“ користи непознато „e_flags“ 0x%lx" + +#: elf64-ppc.c:5816 +msgid "%B: ABI version %ld is not compatible with ABI version %ld output" +msgstr "%B: АБИ издање %ld није сагласно са АБИ-јем издања %ld" + +#: elf64-ppc.c:5843 +#, c-format +msgid " [abiv%ld]" +msgstr " [abiv%ld]" + +#: elf64-ppc.c:7007 +msgid "%P: copy reloc against `%T' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" +msgstr "%P: премештање умножавања наспрам „%T“ захтева лењо „plt“ повезивање; избегавајте подешавање „LD_BIND_NOW=1“ или надоградите гцц\n" + +#: elf64-ppc.c:7270 +msgid "%B: undefined symbol on R_PPC64_TOCSAVE relocation" +msgstr "%B: неодређени симбол на „R_PPC64_TOCSAVE“ премештању" + +#: elf64-ppc.c:7499 +msgid "%P: dynreloc miscount for %B, section %A\n" +msgstr "%P: грешка бројања динамичког премештања за „%B“, одељак „%A“\n" + +#: elf64-ppc.c:7583 +msgid "%B: .opd is not a regular array of opd entries" +msgstr "%B: „.opd“ није регуларан низ уноса операнда" + +#: elf64-ppc.c:7592 +msgid "%B: unexpected reloc type %u in .opd section" +msgstr "%B: неочекивана врста премештања „%u“ у „.opd“ одељку" + +#: elf64-ppc.c:7613 +msgid "%B: undefined sym `%s' in .opd section" +msgstr "%B: неодређени симбол „%s“ у „.opd“ одељку" + +#: elf64-ppc.c:8177 +msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" +msgstr "„%H“ „__tls_get_addr“ је изгубио аргумент, ТЛС оптимизација је искључена\n" + +#: elf64-ppc.c:8516 elf64-ppc.c:9139 +#, c-format +msgid "%s defined on removed toc entry" +msgstr "„%s“ је дефинисано на уклоњеном уносу табеле садржаја" + +#: elf64-ppc.c:8868 +msgid "%P: %H: toc optimization is not supported for %s instruction.\n" +msgstr "%P: %H: оптимизација табеле садржаја није подржана за инструкцију „%s“.\n" + +#: elf64-ppc.c:9096 +msgid "%P: %H: %s references optimized away TOC entry\n" +msgstr "%P: %H: „%s“ упућује на оптимизацијом одстрањени унос табеле садржаја\n" + +#: elf64-ppc.c:10394 +msgid "%P: cannot find opd entry toc for `%T'\n" +msgstr "%P: не могу да нађем табелу садржаја уноса операнда за „%T“\n" + +#: elf64-ppc.c:10479 +msgid "%P: long branch stub `%s' offset overflow\n" +msgstr "%P: прекорачење помераја дугог окрајка гране „%s“\n" + +#: elf64-ppc.c:10538 +msgid "%P: can't find branch stub `%s'\n" +msgstr "%P: не могу да нађем окрајак гране „%s“\n" + +#: elf64-ppc.c:10602 elf64-ppc.c:10749 elf64-ppc.c:12416 +msgid "%P: linkage table error against `%T'\n" +msgstr "%P: грешка табеле повезивања наспрам „%T“\n" + +#: elf64-ppc.c:10940 +msgid "%P: can't build branch stub `%s'\n" +msgstr "%P: не могу да изградим окрајак гране „%s“\n" + +#: elf64-ppc.c:11748 +msgid "%B section %A exceeds stub group size" +msgstr "„%B“ одељак „%A“ превазилази величину групе окрајка" + +#: elf64-ppc.c:12662 elf64-ppc.c:12697 +msgid "%P: %s offset too large for .eh_frame sdata4 encoding" +msgstr "%P: „%s“ померај је превелик за „.eh_frame sdata4“ кодирање" + +#: elf64-ppc.c:12758 +msgid "%P: stubs don't match calculated size\n" +msgstr "%P: окрајци не одговарају израчунатој величини\n" + +#: elf64-ppc.c:12770 +#, 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\n" +" plt call toc %lu" +msgstr "" +"окрајци повезивача у „%u“ група „%s“\n" +" грана %lu\n" +" тас уређење %lu\n" +" дуга брана %lu\n" +" уређење дуге тас %lu\n" +" плт позив %lu\n" +" плт позива тас %lu" + +#: elf64-ppc.c:13096 +msgid "%P: %H: %s used with TLS symbol `%T'\n" +msgstr "%P: %H: „%s“ је коришћено са ТЛС симболом „%T“\n" + +#: elf64-ppc.c:13097 +msgid "%P: %H: %s used with non-TLS symbol `%T'\n" +msgstr "%P: %H: „%s“ је коришћено са не-ТЛС симболом „%T“\n" + +#: elf64-ppc.c:13675 +msgid "%P: %H: call to `%T' lacks nop, can't restore toc; recompile with -fPIC\n" +msgstr "%P: %H: позиву за „%T“ недостаје „nop“, не могу да вратим табелу садржаја; поново преведите са „-fPIC“\n" + +#: elf64-ppc.c:13793 +msgid "%P: %B: unknown relocation type %d for `%T'\n" +msgstr "%P: %B: непозната врста премештања „%d“ за „%T“\n" + +#: elf64-ppc.c:14310 +msgid "%P: %H: %s for indirect function `%T' unsupported\n" +msgstr "%P: %H: „%s“ за индиректну функцију „%T“ није подржано\n" + +#: elf64-ppc.c:14417 +msgid "%P: %B: %s is not supported for `%T'\n" +msgstr "%P: %B: „%s“ није подржано за симбол „%T“\n" + +#: elf64-ppc.c:14565 +msgid "%P: %H: error: %s not a multiple of %u\n" +msgstr "%P: %H: грешка: „%s“ није производ „%u“\n" + +#: elf64-ppc.c:14586 +msgid "%P: %H: unresolvable %s against `%T'\n" +msgstr "%P: %H: „%s“ је нерешиво наспрам „%T“\n" + +#: elf64-ppc.c:14644 +msgid "%P: %H: %s against `%T': error %d\n" +msgstr "%P: %H: „%s“ наспрам „%T“: грешка %d\n" + +#: elf64-sh64.c:1686 +#, c-format +msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" +msgstr "%s: грешка: непоравната врста премештања „%d“ на %08x премештање %08x\n" + +#: elf64-sparc.c:446 +msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" +msgstr "%B: Само регистри „%%g[2367]“ могу бити декларисани коришћењем „STT_REGISTER“" + +#: elf64-sparc.c:466 +msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" +msgstr "Регистар „%%g%d“ је коришћен несагласно: „%s“ у „%B“, претходно „%s“ у „%B“" + +#: elf64-sparc.c:489 +msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" +msgstr "Симбол „%s“ има другачије врсте: „REGISTER“ у „%B“, претходно „%s“ у „%B“" + +#: elf64-sparc.c:534 +msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" +msgstr "Симбол „%s“ има другачије врсте: „%s“ у „%B“, претходно „REGISTER“ у „%B“" + +#: elf64-sparc.c:687 +msgid "%B: linking UltraSPARC specific with HAL specific code" +msgstr "%B: повезујем код специфичан „UltraSPARC“-у са кодом специфичним „HAL“-у" + +#: elf64-x86-64.c:1530 +msgid "%B: relocation %s against symbol `%s' isn't supported in x32 mode" +msgstr "%B: „%s“ премештање наспрам симбола „%s“ није подржано у режиму x32" + +#: elf64-x86-64.c:1688 +msgid "%B: '%s' accessed both as normal and thread local symbol" +msgstr "%B: „%s“ се приступило и као нормалном и као симболу локалне нити" + +#: elf64-x86-64.c:3405 /src/binutils-gdb/bfd/elfnn-aarch64.c:3511 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d" +msgstr "%B: премештање „%s“ наспрам „STT_GNU_IFUNC“ симбола „%s“ има не-нулти сабирак: %d" + +#: elf64-x86-64.c:3667 +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:3787 +msgid "; recompile with -fPIC" +msgstr "; поново преведите са „-fPIC“" + +#: elf64-x86-64.c:3792 +msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" +msgstr "%B: премештање „%s“ наспрам „%s“ „%s“ се не може користити приликом стварања дељеног објекта%s" + +#: elf64-x86-64.c:3794 +msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +msgstr "%B: премештање „%s“ наспрам недефинисаног „%s“ „%s“ се не може користити приликом стварања дељеног објекта%s" + +#: elf64-x86-64.c:3900 +msgid "%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range" +msgstr "%B: сабирак -0x%x у премештању „%s“ наспрам симбола „%s“ на 0x%lx у одељку „%A“ је ван опсега" + +#: elf64-x86-64.c:3908 +msgid "%B: addend 0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range" +msgstr "%B: сабирак 0x%x у премештању „%s“ наспрам симбола „%s“ на 0x%lx у одељку „%A“ је ван опсега" + +#: elfcode.h:760 +#, c-format +msgid "warning: %s has a corrupt string table index - ignoring" +msgstr "упозорење: „%s“ има оштећен индекс табеле ниске — занемарујем" + +#: elfcode.h:1186 +#, c-format +msgid "%s: version count (%ld) does not match symbol count (%ld)" +msgstr "%s: број издања (%ld) не одговара броју симбола (%ld)" + +#: elfcode.h:1440 +#, c-format +msgid "%s(%s): relocation %d has invalid symbol index %ld" +msgstr "%s(%s): премештање „%d“ има неисправан индекс симбола %ld" + +#: elfcore.h:305 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." +msgstr "Упозорење: „%B“ је скраћено: очекивах величину датотеке језгра >= %lu, нађох: %lu." + +#: elflink.c:1143 +msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" +msgstr "%s: ТЛС дефиниција у „%B“ одељак „%A“ не одговара не-ТЛС дефиницији у „%B“ одељак „%A“" + +#: elflink.c:1148 +msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" +msgstr "%s: ТЛС упута у „%B“ не одговара не-ТЛС упути у „%B“" + +#: elflink.c:1153 +msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" +msgstr "%s: ТЛС дефиниција у „%B“ одељак „%A“ не одговара не-ТЛС упути у „%B“" + +#: elflink.c:1158 +msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" +msgstr "%s: ТЛС упута у „%B“ не одговара не-ТЛС дефиницији у „%B“ одељак „%A“" + +#: elflink.c:1763 +msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" +msgstr "%B: неочекивано поновно дефинисање индиректно верзионисаног симбола „%s“" + +#: elflink.c:2066 +msgid "%B: version node not found for symbol %s" +msgstr "%B: нисам нашао чвор издања за симбол „%s“" + +#: elflink.c:2157 +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:2168 +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: не-нулти индекс симбола (0x%lx) за померај 0x%lx у одељку „%A“ када датотека објекта нема табелу симбола" + +#: elflink.c:2358 +msgid "%B: relocation size mismatch in %B section %A" +msgstr "%B: величина премештања не одговара у „%B“ одељак „%A“" + +#: elflink.c:2640 +#, c-format +msgid "warning: type and size of dynamic symbol `%s' are not defined" +msgstr "упозорење: врста и величина динамичког симбола „%s“ нису дефинисане" + +#: elflink.c:3403 +msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n" +msgstr "%P: нађох измењени „ELF“ машински код (%d) у „%B“, очекивах „%d“\n" + +#: elflink.c:4032 +msgid "%B: %s: invalid version %u (max %d)" +msgstr "%B: %s: неисправно издање %u (најв. %d)" + +#: elflink.c:4068 +msgid "%B: %s: invalid needed version %d" +msgstr "%B: %s: неисправно потребно издање %d" + +#: elflink.c:4452 +msgid "%B: undefined reference to symbol '%s'" +msgstr "%B: недефинисана упута ка симболу „%s“" + +#: elflink.c:5523 +msgid "%B: stack size specified and %s set" +msgstr "%B: величина спремника је наведена и „%s“ подешена" + +#: elflink.c:5526 +msgid "%B: %s not absolute" +msgstr "%B: „%s“ није апсолутно" + +#: elflink.c:5824 +#, c-format +msgid "%s: undefined version: %s" +msgstr "%s: недефинисано издање: %s" + +#: elflink.c:5892 +msgid "%B: .preinit_array section is not allowed in DSO" +msgstr "%B: одељак „.preinit_array“ није дозвољен у „DSO“-у" + +#: elflink.c:7657 +#, c-format +msgid "undefined %s reference in complex symbol: %s" +msgstr "недефинисана „%s“ упута у сложеном симболу: %s" + +#: elflink.c:7811 +#, c-format +msgid "unknown operator '%c' in complex symbol" +msgstr "непознат оператор „%c“ у сложеном симболу" + +#: elflink.c:8165 elflink.c:8182 elflink.c:8219 elflink.c:8236 +msgid "%B: Unable to sort relocs - they are in more than one size" +msgstr "%B: Не могу да поређам премештања — имају више од једне величине" + +#: elflink.c:8196 elflink.c:8250 +msgid "%B: Unable to sort relocs - they are of an unknown size" +msgstr "%B: Не могу да поређам премештања — непознате су величине" + +#: elflink.c:8301 +msgid "Not enough memory to sort relocations" +msgstr "Нема довољно меморије за ређање премештања" + +#: elflink.c:8494 +msgid "%B: Too many sections: %d (>= %d)" +msgstr "%B: Превише одељака: %d (>= %d)" + +#: elflink.c:8775 +msgid "%B: internal symbol `%s' in %B is referenced by DSO" +msgstr "%B: на унутрашњи симбол „%s“ у „%B“ упућује „DSO“" + +#: elflink.c:8777 +msgid "%B: hidden symbol `%s' in %B is referenced by DSO" +msgstr "%B: на скривени симбол „%s“ у „%B“ упућује „DSO“" + +#: elflink.c:8779 +msgid "%B: local symbol `%s' in %B is referenced by DSO" +msgstr "%B: на локални симбол „%s“ у „%B“ упућује „DSO“" + +#: elflink.c:8890 +msgid "%B: could not find output section %A for input section %A" +msgstr "%B: не могу да нађем излазни одељак „%A“ за улазни одељак „%A“" + +#: elflink.c:9013 +msgid "%B: protected symbol `%s' isn't defined" +msgstr "%B: заштићени симбол „%s“ није дефинисан" + +#: elflink.c:9015 +msgid "%B: internal symbol `%s' isn't defined" +msgstr "%B: унутрашњи симбол „%s“ није дефинисан" + +#: elflink.c:9017 +msgid "%B: hidden symbol `%s' isn't defined" +msgstr "%B: скривени симбол „%s“ није дефинисан" + +#: elflink.c:9043 +msgid "%B: No symbol version section for versioned symbol `%s'" +msgstr "%B: Нема одељка издања симбола за верзионисани симбол „%s“" + +#: elflink.c:9598 +msgid "error: %B: size of section %A is not multiple of address size" +msgstr "грешка: %B: величина одељка „%A“ није производ величине адресе" + +#: elflink.c:9645 +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:10369 +msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" +msgstr "„%A“ има и уређени [„%A“ у „%B“] и неуређени [„%A“ у „%B“] одељак" + +#: elflink.c:10374 +#, c-format +msgid "%A has both ordered and unordered sections" +msgstr "„%A“ има и уређени и неуређени одељак" + +#: elflink.c:10982 +msgid "%B: file class %s incompatible with %s" +msgstr "%B: класа датотеке „%s“ није сагласна са „%s“" + +#: elflink.c:11303 elflink.c:11347 +msgid "%B: could not find output section %s" +msgstr "%B: не могу да нађем излазни одељак „%s“" + +#: elflink.c:11308 +#, c-format +msgid "warning: %s section has zero size" +msgstr "упозорење: одељак „%s“ је нулте величине" + +#: elflink.c:11353 +#, c-format +msgid "warning: section '%s' is being made into a note" +msgstr "упозорење: одељак „%s“ је претворен у белешку" + +#: elflink.c:11419 +msgid "%P%X: read-only segment has dynamic relocations.\n" +msgstr "%P%X: одељак само за читање има динамичка премештања.\n" + +#: elflink.c:11422 +msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" +msgstr "%P: упозорење: стварам „DT_TEXTREL“ у дељеном објекту.\n" + +#: elflink.c:11545 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: не може да чита симболе: %E\n" + +#: elflink.c:11989 +msgid "Removing unused section '%s' in file '%B'" +msgstr "Уклањам некоришћени одељак „%s“ у датотеци „%B“" + +#: elflink.c:12200 +msgid "Warning: gc-sections option ignored" +msgstr "Упозорење: опција „gc“ одељака је занемарена" + +#: elflink.c:12489 +#, c-format +msgid "Unrecognized INPUT_SECTION_FLAG %s\n" +msgstr "„INPUT_SECTION_FLAG %s“ није познато\n" + +#: elfxx-mips.c:1419 +msgid "static procedure (no name)" +msgstr "статички поступак (без назива)" + +#: elfxx-mips.c:5476 +msgid "MIPS16 and microMIPS functions cannot call each other" +msgstr "Функције „MIPS16“ и „microMIPS“ не могу да позивају једна другу" + +#: elfxx-mips.c:6087 +msgid "%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled." +msgstr "%B: %A+0x%lx: Неподржан скок између ИСА режима; размотрите поновно превођење са укљученим међуповезивањем." + +#: elfxx-mips.c:6756 elfxx-mips.c:6979 +msgid "%B: Warning: bad `%s' option size %u smaller than its header" +msgstr "%B: Упозорење: лоша величина опције „%s“ %u мања од заглавља" + +#: elfxx-mips.c:7734 elfxx-mips.c:7859 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "%B: Упозорење: не могу да одредим циљну функцију за одељак окрајка „%s“" + +#: elfxx-mips.c:7990 +msgid "%B: Malformed reloc detected for section %s" +msgstr "%B: Откривено је лоше премештање за одељак „%s“" + +#: elfxx-mips.c:8065 +msgid "%B: GOT reloc at 0x%lx not expected in executables" +msgstr "%B: „GOT“ премештање на 0x%lx није очекивано у извршним" + +#: elfxx-mips.c:8199 +msgid "%B: CALL16 reloc at 0x%lx not against global symbol" +msgstr "%B: „CALL16“ премештање на 0x%lx није наспрам општег симбола" + +#: elfxx-mips.c:8977 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "не-динамичка премештања упућују на динамички симбол „%s“" + +#: elfxx-mips.c:9877 +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:10016 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "одељак малих података превазилази 64KB; доња граница величине малих података (видите опцију „-G“)" + +#: elfxx-mips.c:10035 +msgid "JALX to a non-word-aligned address" +msgstr "„JALX“ на адресу поравнату не-речју" + +#: elfxx-mips.c:10402 elfxx-mips.c:10966 +msgid "%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC" +msgstr "%B: „%A“ померај %ld из „%A“ иза опсега „ADDIUPC“" + +#: elfxx-mips.c:13990 +#, c-format +msgid "%s: illegal section name `%s'" +msgstr "%s: неисправан назив одељка „%s“" + +#: elfxx-mips.c:14375 elfxx-mips.c:14381 elfxx-mips.c:14387 elfxx-mips.c:14407 +#: elfxx-mips.c:14413 elfxx-mips.c:14419 elfxx-mips.c:14441 elfxx-mips.c:14460 +#: elfxx-mips.c:14467 elfxx-mips.c:14474 +msgid "Warning: %B uses %s (set by %B), %B uses %s" +msgstr "Упозорење: „%B“ користи „%s“ (подешено са „%B“), „%B“ користи „%s“" + +#: elfxx-mips.c:14394 elfxx-mips.c:14426 elfxx-mips.c:14447 elfxx-mips.c:14480 +msgid "Warning: %B uses %s (set by %B), %B uses unknown floating point ABI %d" +msgstr "Упозорење: „%B“ користи „%s“ (подешено са „%B“), „%B“ користи непознату АБИ тачку покретног зареза „%d“" + +#: elfxx-mips.c:14493 elfxx-mips.c:14501 elfxx-mips.c:14509 elfxx-mips.c:14517 +msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses %s" +msgstr "Упозорење: „%B“ користи непознату АБИ тачку покретног зареза „%d“ (подешено са „%B“), „%B“ користи „%s“" + +#: elfxx-mips.c:14525 +msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses unknown floating point ABI %d" +msgstr "Упозорење: „%B“ користи непознату АБИ тачку покретног зареза „%d“ (подешено са „%B“), „%B“ користи непознату АБИ тачку покретног зареза „%d“" + +#: elfxx-mips.c:14548 +msgid "Warning: %B uses %s (set by %B), %B uses unknown MSA ABI %d" +msgstr "Упозорење: „%B“ користи „%s“ (подешено са „%B“), „%B“ користи непознато МСА АБИ „%d“" + +#: elfxx-mips.c:14559 +msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses %s" +msgstr "Упозорење: „%B“ користи непознато МСА АБИ „%d“ (подешено са „%B“), „%B“ користи „%s“" + +#: elfxx-mips.c:14567 +msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses unknown MSA ABI %d" +msgstr "Упозорење: „%B“ користи непознато МСА АБИ „%d“ (подешено са „%B“), „%B“ користи непознато МСА АБИ „%d“" + +#: elfxx-mips.c:14599 +msgid "%B: endianness incompatible with that of the selected emulation" +msgstr "%B: крајњост није сагласна са оном изабране емулације" + +#: elfxx-mips.c:14610 +msgid "%B: ABI is incompatible with that of the selected emulation" +msgstr "%B: АБИ није сагласна са оном изабране емулације" + +#: elfxx-mips.c:14694 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "%B: упозорење: повезујем датотеке абипозива са датотекама не-абипозива" + +#: elfxx-mips.c:14711 +msgid "%B: linking 32-bit code with 64-bit code" +msgstr "%B: повезујем 32-битни код са 64-битним кодом" + +#: elfxx-mips.c:14739 elfxx-mips.c:14802 +msgid "%B: linking %s module with previous %s modules" +msgstr "%B: повезујем „%s“ модул са претходним „%s“ модулима" + +#: elfxx-mips.c:14762 +msgid "%B: ABI mismatch: linking %s module with previous %s modules" +msgstr "%B: АБИ не одговара: повезујем „%s“ модул са претходним „%s“ модулима" + +#: elfxx-mips.c:14786 +msgid "%B: ASE mismatch: linking %s module with previous %s modules" +msgstr "%B: АСЕ не одговара: повезујем „%s“ модул са претходним „%s“ модулима" + +#: elfxx-mips.c:14958 +#, c-format +msgid " [abi=O32]" +msgstr " [аби=O32]" + +#: elfxx-mips.c:14960 +#, c-format +msgid " [abi=O64]" +msgstr " [аби=O64]" + +#: elfxx-mips.c:14962 +#, c-format +msgid " [abi=EABI32]" +msgstr " [аби=EABI32]" + +#: elfxx-mips.c:14964 +#, c-format +msgid " [abi=EABI64]" +msgstr " [аби=EABI64]" + +#: elfxx-mips.c:14966 +#, c-format +msgid " [abi unknown]" +msgstr " [аби није познато]" + +#: elfxx-mips.c:14968 +#, c-format +msgid " [abi=N32]" +msgstr " [аби=N32]" + +#: elfxx-mips.c:14970 +#, c-format +msgid " [abi=64]" +msgstr " [аби=64]" + +#: elfxx-mips.c:14972 +#, c-format +msgid " [no abi set]" +msgstr " [аби није подешено]" + +#: elfxx-mips.c:14993 +#, c-format +msgid " [unknown ISA]" +msgstr " [непознато ИСА]" + +#: elfxx-mips.c:15013 +#, c-format +msgid " [not 32bitmode]" +msgstr " [није 32-битни режим]" + +#: elfxx-sparc.c:640 +#, c-format +msgid "invalid relocation type %d" +msgstr "неисправна врста премештања „%d“" + +#: elfxx-tilegx.c:4433 +msgid "%B: Cannot link together %s and %s objects." +msgstr "%B: Не могу да повежем заједно објекте „%s“ и „%s“." + +#: i386linux.c:418 m68klinux.c:421 sparclinux.c:414 +#, c-format +msgid "Output file requires shared library `%s'\n" +msgstr "Излазна датотека захтева дељену библиотеку „%s“\n" + +#: i386linux.c:426 m68klinux.c:429 sparclinux.c:422 +#, c-format +msgid "Output file requires shared library `%s.so.%s'\n" +msgstr "Излазна датотека захтева дељену библиотеку „%s.so.%s“\n" + +#: i386linux.c:613 i386linux.c:663 m68klinux.c:618 m68klinux.c:666 +#: sparclinux.c:609 sparclinux.c:659 +#, c-format +msgid "Symbol %s not defined for fixups\n" +msgstr "Симбол „%s“ није дефинисан за исправке\n" + +#: i386linux.c:687 m68klinux.c:690 sparclinux.c:683 +msgid "Warning: fixup count mismatch\n" +msgstr "Упозорење: број исправки не одговара\n" + +#: ieee.c:158 +#, c-format +msgid "%s: string too long (%d chars, max 65535)" +msgstr "%s: ниска је предуга (%d знака, најв. 65535)" + +#: ieee.c:285 +#, c-format +msgid "%s: unrecognized symbol `%s' flags 0x%x" +msgstr "%s: непознат симбол „%s“ заставице 0x%x" + +#: ieee.c:791 +msgid "%B: unimplemented ATI record %u for symbol %u" +msgstr "%B: непримењени АТИ запис „%u“ за симбол „%u“" + +#: ieee.c:815 +msgid "%B: unexpected ATN type %d in external part" +msgstr "%B: неочекивана АТН врста „%d“ у спољном делу" + +#: ieee.c:837 +msgid "%B: unexpected type after ATN" +msgstr "%B: неочекивана врста након АТН-а" + +#: ihex.c:230 +msgid "%B:%d: unexpected character `%s' in Intel Hex file" +msgstr "%B:%d: неочекивани знак „%s“ у Интеловој хексадецималној датотеци" + +#: ihex.c:337 +msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" +msgstr "%B:%u: лоша сума провере у Интеловој хексадецималној датотеци (очекивах %u, нађох %u)" + +#: ihex.c:392 +msgid "%B:%u: bad extended address record length in Intel Hex file" +msgstr "%B:%u: лоша дужина записа проширене адресе у Интеловој хексадецималној датотеци" + +#: ihex.c:409 +msgid "%B:%u: bad extended start address length in Intel Hex file" +msgstr "%B:%u: лоша дужина записа проширене почетне адресе у Интеловој хексадецималној датотеци" + +#: ihex.c:426 +msgid "%B:%u: bad extended linear address record length in Intel Hex file" +msgstr "%B:%u: лоша дужина записа проширене линеарне адресе у Интеловој хексадецималној датотеци" + +#: ihex.c:443 +msgid "%B:%u: bad extended linear start address length in Intel Hex file" +msgstr "%B:%u: лоша дужина записа проширене линеарне почетне адресе у Интеловој хексадецималној датотеци" + +#: ihex.c:460 +msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" +msgstr "%B:%u: непозната „ihex“ врста „%u“ у Интеловој хексадецималној датотеци" + +#: ihex.c:579 +msgid "%B: internal error in ihex_read_section" +msgstr "%B: унутрашња грешка у „ihex_одељак_читања“" + +#: ihex.c:613 +msgid "%B: bad section length in ihex_read_section" +msgstr "%B: лоша дужина одељка у „ihex_одељак_читања“" + +#: ihex.c:826 +#, c-format +msgid "%s: address 0x%s out of range for Intel Hex file" +msgstr "%s: адреса 0x%s је ван опсега за Интелову хексадецималну датотеку" + +#: libbfd.c:863 +msgid "%B: unable to get decompressed section %A" +msgstr "%B: не могу да добавим распаковани одељак „%A“" + +#: libbfd.c:1012 +msgid "%B: compiled for a big endian system and target is little endian" +msgstr "%B: преведено за систем велике крајности а циљ је мала крајност" + +#: libbfd.c:1014 +msgid "%B: compiled for a little endian system and target is big endian" +msgstr "%B: преведено за систем мале крајности а циљ је велика крајност" + +#: libbfd.c:1043 +#, c-format +msgid "Deprecated %s called at %s line %d in %s\n" +msgstr "Застарело „%s“ је позвано у „%s“ %d. ред у „%s“\n" + +#: libbfd.c:1046 +#, c-format +msgid "Deprecated %s called\n" +msgstr "Застарело „%s“ је позвано\n" + +#: linker.c:1873 +msgid "%B: indirect symbol `%s' to `%s' is a loop" +msgstr "%B: индиректни симбол „%s“ ка „%s“ је петља" + +#: linker.c:2750 +#, c-format +msgid "Attempt to do relocatable link with %s input and %s output" +msgstr "Покушавам да одрадим преместиву везу са „%s“ улазом и „%s“ излазом" + +#: linker.c:3035 +msgid "%B: ignoring duplicate section `%A'\n" +msgstr "%B: занемарујем удвостручени одељак „%A“\n" + +#: linker.c:3044 linker.c:3053 +msgid "%B: duplicate section `%A' has different size\n" +msgstr "%B: удвостручени одељак „%A“ има другачију величину\n" + +#: linker.c:3061 linker.c:3066 +msgid "%B: could not read contents of section `%A'\n" +msgstr "%B: не могу да прочитам садржај одељка „%A“\n" + +#: linker.c:3070 +msgid "%B: duplicate section `%A' has different contents\n" +msgstr "%B: удвостручени одељак „%A“ има другачији садржај\n" + +#: mach-o.c:648 +msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" +msgstr "bfd_mach_o_canonicalize_symtab: не могу да прочитам симболе" + +#: mach-o.c:1918 +#, c-format +msgid "mach-o: there are too many sections (%d) maximum is 255,\n" +msgstr "mach-o: има превише одељака (%d) највише је 255,\n" + +#: mach-o.c:2017 +#, c-format +msgid "unable to write unknown load command 0x%lx" +msgstr "не могу да запишем непознату наредбу учитавања 0x%lx" + +#: mach-o.c:2272 +msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." +msgstr "извините: „modtab“, „toc“ и „extrefsyms“ још нису примењени за наредбе „dysymtab“." + +#: mach-o.c:2898 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %lu" +msgstr "bfd_mach_o_read_symtab_symbol: не могу да прочитам %d бајта на %lu" + +#: mach-o.c:2916 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %lu)" +msgstr "bfd_mach_o_read_symtab_symbol: назив је ван опсега (%lu >= %lu)" + +#: mach-o.c:2997 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined" +msgstr "bfd_mach_o_read_symtab_symbol: симбол „%s“ је навео неисправан одељак „%d“ (најв. %lu): постављам на недефинисано" + +#: mach-o.c:3013 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined" +msgstr "bfd_mach_o_read_symtab_symbol: симбол „%s“ је навео неисправно поље врсте 0x%x: постављам на недефинисано" + +#: mach-o.c:3085 +msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" +msgstr "bfd_mach_o_read_symtab_symbols: не могу да доделим меморију за симболе" + +#: mach-o.c:3915 +msgid "%B: unknown load command 0x%lx" +msgstr "%B: непозната наредба учитавања 0x%lx" + +#: mach-o.c:4107 +#, c-format +msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" +msgstr "bfd_mach_o_scan: непозната архитектура 0x%lx/0x%lx" + +#: mach-o.c:4204 +#, c-format +msgid "unknown header byte-order value 0x%lx" +msgstr "непозната вредност поретка бајта заглавља 0x%lx" + +#: merge.c:832 +#, c-format +msgid "%s: access beyond end of merged section (%ld)" +msgstr "%s: приступ иза краја стопљеног одељка (%ld)" + +#: mmo.c:455 +#, c-format +msgid "%s: No core to allocate section name %s\n" +msgstr "%s: Нема језгра за додељивање назива одељка „%s“\n" + +#: mmo.c:530 +#, c-format +msgid "%s: No core to allocate a symbol %d bytes long\n" +msgstr "%s: Нема језгра за додељивање симбола дугог %d бајта\n" + +#: mmo.c:1189 +#, c-format +msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" +msgstr "%s: неисправна „mmo“ датотека: вредност покретања за $255 није „Main“\n" + +#: mmo.c:1334 +#, 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:1568 +#, c-format +msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" +msgstr "%s: неисправна „mmo“ датотека: лопкод „%d“ није подржан\n" + +#: mmo.c:1578 +#, 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:1614 +#, 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:1660 +#, 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:1699 +#, 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:1708 +#, 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:1731 +#, 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:1754 +#, c-format +msgid "%s: cannot allocate file name for file number %d, %d bytes\n" +msgstr "%s: не могу да доделим назив датотеке за број датотеке %d, %d бајта\n" + +#: mmo.c:1774 +#, 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:1787 +#, 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:1893 +#, 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:1929 +#, c-format +msgid "%s: invalid mmo file: lop_end not last item in file\n" +msgstr "%s: неисправна „mmo“ датотека: „lop_end“ није последња ставка у датотеци\n" + +#: mmo.c:1942 +#, 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:2652 +#, c-format +msgid "%s: invalid symbol table: duplicate symbol `%s'\n" +msgstr "%s: неисправна табела симбола: удвостручени симбол „%s“\n" + +#: mmo.c:2892 +#, 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:2984 +#, 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:3029 +#, c-format +msgid "%s: internal error, symbol table changed size from %d to %d words\n" +msgstr "%s: унутрашња грешка, табела симбола је изменила величину из %d у %d речи\n" + +#: mmo.c:3081 +#, c-format +msgid "%s: internal error, internal register section %s had contents\n" +msgstr "%s: унутрашња грешка, унутрашњи одељак регистра „%s“ има садржај\n" + +#: mmo.c:3132 +#, c-format +msgid "%s: no initialized registers; section length 0\n" +msgstr "%s: нема покренутих регистара; дужина одељка 0\n" + +#: mmo.c:3138 +#, c-format +msgid "%s: too many initialized registers; section length %ld\n" +msgstr "%s: превише покренутих регистара; дужина одељка %ld\n" + +#: mmo.c:3143 +#, 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:128 +#, c-format +msgid "Unhandled OSF/1 core file section type %d\n" +msgstr "Не могу да радим са врстом одељка %d датотеке OSF/1 језгра\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:719 +msgid "%B: unimplemented %s\n" +msgstr "%B: није примењено „%s“\n" + +#: pe-mips.c:745 +msgid "%B: jump too far away\n" +msgstr "%B: скок је превише далеко\n" + +#: pe-mips.c:771 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "%B: лоше „pair/reflo“ након „refhi“\n" + +#: pef.c:522 +#, c-format +msgid "bfd_pef_scan: unknown architecture 0x%lx" +msgstr "bfd_pef_scan: непозната архитектура 0x%lx" + +#: pei-x86_64.c:469 +#, c-format +msgid "warning: .pdata section size (%ld) is not a multiple of %d\n" +msgstr "упозорење: величина одељка „.pdata“ (%ld) није производ од %d\n" + +#: pei-x86_64.c:474 peigen.c:1626 peigen.c:1809 pepigen.c:1626 pepigen.c:1809 +#: pex64igen.c:1626 pex64igen.c:1809 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" +"\n" +"Табела функција (протумачени садржај одељка „.pdata“)\n" + +#: pei-x86_64.c:476 +#, c-format +msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" +msgstr "vma:\t\t\tАдреса почетка\t Адреса краја\t Изложени подаци\n" + +#. XXX code yet to be written. +#: peicode.h:758 +msgid "%B: Unhandled import type; %x" +msgstr "%B: Необрадива врста увоза; %x" + +#: peicode.h:763 +msgid "%B: Unrecognised import type; %x" +msgstr "%B: Непозната врста увоза; %x" + +#: peicode.h:777 +msgid "%B: Unrecognised import name type; %x" +msgstr "%B: Непознат назив врсте увоза; %x" + +#: peicode.h:1173 +msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" +msgstr "%B: Непозната врста машине (0x%x) у архиви записа библиотеке увоза" + +#: peicode.h:1185 +msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" +msgstr "%B: Позната али необрадива врста машине (0x%x) у архиви записа библиотеке увоза" + +#: peicode.h:1203 +msgid "%B: size field is zero in Import Library Format header" +msgstr "%B: оље величине је нула у заглављу записа библиотеке увоза" + +#: peicode.h:1234 +msgid "%B: string not null terminated in ILF object file." +msgstr "%B: ниска се не завршава нулом у датотеци ИЛФ објекта." + +#: ppcboot.c:391 +#, c-format +msgid "" +"\n" +"ppcboot header:\n" +msgstr "" +"\n" +"заглавље „ppcboot“:\n" + +#: ppcboot.c:392 +#, c-format +msgid "Entry offset = 0x%.8lx (%ld)\n" +msgstr "Померај уноса = 0x%.8lx (%ld)\n" + +#: ppcboot.c:394 +#, c-format +msgid "Length = 0x%.8lx (%ld)\n" +msgstr "Дужина = 0x%.8lx (%ld)\n" + +#: ppcboot.c:398 +#, c-format +msgid "Flag field = 0x%.2x\n" +msgstr "Поље заставице = 0x%.2x\n" + +#: ppcboot.c:404 +#, c-format +msgid "Partition name = \"%s\"\n" +msgstr "Назив партиције = „%s“\n" + +#: ppcboot.c:423 +#, 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:429 +#, 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:435 +#, c-format +msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" +msgstr "Одељак партиције[%d] = 0x%.8lx (%ld)\n" + +#: ppcboot.c:437 +#, c-format +msgid "Partition[%d] length = 0x%.8lx (%ld)\n" +msgstr "Дужина партиције[%d] = 0x%.8lx (%ld)\n" + +#: reloc.c:7371 +msgid "INPUT_SECTION_FLAGS are not supported.\n" +msgstr "„INPUT_SECTION_FLAGS“ није подржано.\n" + +#: reloc.c:7526 +msgid "%X%P: %B(%A): relocation \"%R\" goes out of range\n" +msgstr "%X%P: %B(%A): премештање „%R“ иде ван опсега\n" + +#: rs6000-core.c:448 +#, c-format +msgid "%s: warning core file truncated" +msgstr "%s: упозорење скраћене датотеке језгра" + +#: som.c:5471 +#, c-format +msgid "" +"\n" +"Exec Auxiliary Header\n" +msgstr "" +"\n" +"Помоћно заглавље извршне\n" + +#: som.c:5776 +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“ у датотеци С-записа\n" + +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "%B:%d: Лоша сума провере у датотеци С-записа\n" + +#: stabs.c:279 +msgid "%B(%A+0x%lx): Stabs entry has invalid string index." +msgstr "%B(%A+0x%lx): Унос окрњака има неисправан индекс ниске." + +#: syms.c:1079 +msgid "Unsupported .stab relocation" +msgstr "Премештање „.stab“ није подржано" + +#: vms-alpha.c:1294 +#, c-format +msgid "Unknown EGSD subtype %d" +msgstr "Непозната EGSD подврста %d" + +#: vms-alpha.c:1325 +#, c-format +msgid "Stack overflow (%d) in _bfd_vms_push" +msgstr "Прекорачење спремника (%d) у „_bfd_vms_push“-у" + +#: vms-alpha.c:1338 +msgid "Stack underflow in _bfd_vms_pop" +msgstr "Прекорачење спремника у „_bfd_vms_pop“-у" + +#. These names have not yet been added to this switch statement. +#: vms-alpha.c:1575 +#, c-format +msgid "unknown ETIR command %d" +msgstr "непозната „ETIR“ наредба %d" + +#: vms-alpha.c:1762 +#, c-format +msgid "bad section index in %s" +msgstr "лош индекс одељка у „%s“" + +#: vms-alpha.c:1775 +#, c-format +msgid "unsupported STA cmd %s" +msgstr "неподржана „STA“ наредба „%s“" + +#. Insert field. +#. Unsigned shift. +#. Rotate. +#. Redefine symbol to current location. +#. Define a literal. +#: vms-alpha.c:1951 vms-alpha.c:1982 vms-alpha.c:2229 +#, c-format +msgid "%s: not supported" +msgstr "%s: није подржано" + +#: vms-alpha.c:1957 +#, c-format +msgid "%s: not implemented" +msgstr "%s: није примењено" + +#: vms-alpha.c:2213 +#, c-format +msgid "invalid use of %s with contexts" +msgstr "неисправна употреба „%s“ са контекстом" + +#: vms-alpha.c:2247 +#, c-format +msgid "reserved cmd %d" +msgstr "резервисана наредба „%d“" + +#: vms-alpha.c:2332 +msgid "Object module NOT error-free !\n" +msgstr "Модул објекта НИЈЕ без грешака !\n" + +#: vms-alpha.c:3657 +#, c-format +msgid "SEC_RELOC with no relocs in section %s" +msgstr "„SEC_RELOC“ нема премештања у одељку „%s“" + +#: vms-alpha.c:3709 vms-alpha.c:3922 +#, c-format +msgid "Size error in section %s" +msgstr "Грешка величине у одељку „%s“" + +#: vms-alpha.c:3868 +msgid "Spurious ALPHA_R_BSR reloc" +msgstr "Привидно „ALPHA_R_BSR“ премештање" + +#: vms-alpha.c:3909 +#, c-format +msgid "Unhandled relocation %s" +msgstr "Необрадиво премештање „%s“" + +#: vms-alpha.c:4199 +#, c-format +msgid "unknown source command %d" +msgstr "непозната наредба извора „%d“" + +#: vms-alpha.c:4260 +msgid "DST__K_SET_LINUM_INCR not implemented" +msgstr "„DST__K_SET_LINUM_INCR“ није примењено" + +#: vms-alpha.c:4266 +msgid "DST__K_SET_LINUM_INCR_W not implemented" +msgstr "„DST__K_SET_LINUM_INCR_W“ није примењено" + +#: vms-alpha.c:4272 +msgid "DST__K_RESET_LINUM_INCR not implemented" +msgstr "„DST__K_RESET_LINUM_INCR“ није примењено" + +#: vms-alpha.c:4278 +msgid "DST__K_BEG_STMT_MODE not implemented" +msgstr "„DST__K_BEG_STMT_MODE“ није примењено" + +#: vms-alpha.c:4284 +msgid "DST__K_END_STMT_MODE not implemented" +msgstr "„DST__K_END_STMT_MODE“ није примењено" + +#: vms-alpha.c:4311 +msgid "DST__K_SET_PC not implemented" +msgstr "„DST__K_SET_PC“ није примењено" + +#: vms-alpha.c:4317 +msgid "DST__K_SET_PC_W not implemented" +msgstr "„DST__K_SET_PC_W“ није примењено" + +#: vms-alpha.c:4323 +msgid "DST__K_SET_PC_L not implemented" +msgstr "„DST__K_SET_PC_L“ није примењено" + +#: vms-alpha.c:4329 +msgid "DST__K_SET_STMTNUM not implemented" +msgstr "„DST__K_SET_STMTNUM“ није примењено" + +#: vms-alpha.c:4372 +#, c-format +msgid "unknown line command %d" +msgstr "непозната редна наредба „%d“" + +#: vms-alpha.c:4846 vms-alpha.c:4863 vms-alpha.c:4877 vms-alpha.c:4892 +#: vms-alpha.c:4904 vms-alpha.c:4915 vms-alpha.c:4927 +#, c-format +msgid "Unknown reloc %s + %s" +msgstr "Непознато премештање „%s + %s“" + +#: vms-alpha.c:4982 +#, c-format +msgid "Unknown reloc %s" +msgstr "Непознато премештање „%s“" + +#: vms-alpha.c:4995 +msgid "Invalid section index in ETIR" +msgstr "Неисправан индекс одељка у „ETIR“-у" + +#: vms-alpha.c:5002 +msgid "Relocation for non-REL psect" +msgstr "Премештање за не-РЕЛ п-одељак" + +#: vms-alpha.c:5049 +#, c-format +msgid "Unknown symbol in command %s" +msgstr "Непознати симбол у наредби „%s“" + +#: vms-alpha.c:5564 +#, c-format +msgid " EMH %u (len=%u): " +msgstr " EMH %u (дужина=%u): " + +#: vms-alpha.c:5573 +#, c-format +msgid "Module header\n" +msgstr "Заглавље модула\n" + +#: vms-alpha.c:5574 +#, c-format +msgid " structure level: %u\n" +msgstr " ниво структуре : %u\n" + +#: vms-alpha.c:5575 +#, c-format +msgid " max record size: %u\n" +msgstr " најв. величина бележења: %u\n" + +#: vms-alpha.c:5578 +#, c-format +msgid " module name : %.*s\n" +msgstr " назив модула : %.*s\n" + +#: vms-alpha.c:5580 +#, c-format +msgid " module version : %.*s\n" +msgstr " издање модула : %.*s\n" + +#: vms-alpha.c:5582 +#, c-format +msgid " compile date : %.17s\n" +msgstr " датум превођења : %.17s\n" + +#: vms-alpha.c:5587 +#, c-format +msgid "Language Processor Name\n" +msgstr "Назив језика процесора\n" + +#: vms-alpha.c:5588 +#, c-format +msgid " language name: %.*s\n" +msgstr " назив језика: %.*s\n" + +#: vms-alpha.c:5595 +#, c-format +msgid "Source Files Header\n" +msgstr "Заглавље датотека извора\n" + +#: vms-alpha.c:5596 +#, c-format +msgid " file: %.*s\n" +msgstr " датотека: %.*s\n" + +#: vms-alpha.c:5603 +#, c-format +msgid "Title Text Header\n" +msgstr "Заглавље текста наслова\n" + +#: vms-alpha.c:5604 +#, c-format +msgid " title: %.*s\n" +msgstr " наслов: %.*s\n" + +#: vms-alpha.c:5611 +#, c-format +msgid "Copyright Header\n" +msgstr "Заглавље ауторских права\n" + +#: vms-alpha.c:5612 +#, c-format +msgid " copyright: %.*s\n" +msgstr " ауторска права: %.*s\n" + +#: vms-alpha.c:5618 +#, c-format +msgid "unhandled emh subtype %u\n" +msgstr "необрадива emh подврста „%u“\n" + +#: vms-alpha.c:5628 +#, c-format +msgid " EEOM (len=%u):\n" +msgstr " EEOM (дужина=%u):\n" + +#: vms-alpha.c:5629 +#, c-format +msgid " number of cond linkage pairs: %u\n" +msgstr " број „cond“ парова повезивања: %u\n" + +#: vms-alpha.c:5631 +#, c-format +msgid " completion code: %u\n" +msgstr " довршавање кода: %u\n" + +#: vms-alpha.c:5635 +#, c-format +msgid " transfer addr flags: 0x%02x\n" +msgstr " заставице адресе преноса: 0x%02x\n" + +#: vms-alpha.c:5636 +#, c-format +msgid " transfer addr psect: %u\n" +msgstr " п-одељак адресе преноса : %u\n" + +#: vms-alpha.c:5638 +#, c-format +msgid " transfer address : 0x%08x\n" +msgstr " адреса преноса : 0x%08x\n" + +#: vms-alpha.c:5647 +msgid " WEAK" +msgstr " WEAK" + +#: vms-alpha.c:5649 +msgid " DEF" +msgstr " DEF" + +#: vms-alpha.c:5651 +msgid " UNI" +msgstr " UNI" + +#: vms-alpha.c:5653 vms-alpha.c:5674 +msgid " REL" +msgstr " REL" + +#: vms-alpha.c:5655 +msgid " COMM" +msgstr " COMM" + +#: vms-alpha.c:5657 +msgid " VECEP" +msgstr " VECEP" + +#: vms-alpha.c:5659 +msgid " NORM" +msgstr " NORM" + +#: vms-alpha.c:5661 +msgid " QVAL" +msgstr " QVAL" + +#: vms-alpha.c:5668 +msgid " PIC" +msgstr " PIC" + +#: vms-alpha.c:5670 +msgid " LIB" +msgstr " LIB" + +#: vms-alpha.c:5672 +msgid " OVR" +msgstr " OVR" + +#: vms-alpha.c:5676 +msgid " GBL" +msgstr " GBL" + +#: vms-alpha.c:5678 +msgid " SHR" +msgstr " SHR" + +#: vms-alpha.c:5680 +msgid " EXE" +msgstr " EXE" + +#: vms-alpha.c:5682 +msgid " RD" +msgstr " RD" + +#: vms-alpha.c:5684 +msgid " WRT" +msgstr " WRT" + +#: vms-alpha.c:5686 +msgid " VEC" +msgstr " VEC" + +#: vms-alpha.c:5688 +msgid " NOMOD" +msgstr " NOMOD" + +#: vms-alpha.c:5690 +msgid " COM" +msgstr " COM" + +#: vms-alpha.c:5692 +msgid " 64B" +msgstr " 64B" + +#: vms-alpha.c:5701 +#, c-format +msgid " EGSD (len=%u):\n" +msgstr " EGSD (дужина=%u):\n" + +#: vms-alpha.c:5713 +#, c-format +msgid " EGSD entry %2u (type: %u, len: %u): " +msgstr " „EGSD“ унос „%2u“ (врстаype: %u, дужина: %u): " + +#: vms-alpha.c:5725 +#, c-format +msgid "PSC - Program section definition\n" +msgstr "PSC — Дефиниција одељка програма\n" + +#: vms-alpha.c:5726 vms-alpha.c:5743 +#, c-format +msgid " alignment : 2**%u\n" +msgstr " поравнање : 2**%u\n" + +#: vms-alpha.c:5727 vms-alpha.c:5744 +#, c-format +msgid " flags : 0x%04x" +msgstr " заставице : 0x%04x" + +#: vms-alpha.c:5731 +#, c-format +msgid " alloc (len): %u (0x%08x)\n" +msgstr " додела (дужина): %u (0x%08x)\n" + +#: vms-alpha.c:5732 vms-alpha.c:5789 vms-alpha.c:5838 +#, c-format +msgid " name : %.*s\n" +msgstr " назив : %.*s\n" + +#: vms-alpha.c:5742 +#, c-format +msgid "SPSC - Shared Image Program section def\n" +msgstr "SPSC — Дефиниција одељка програма дељене слике\n" + +#: vms-alpha.c:5748 +#, c-format +msgid " alloc (len) : %u (0x%08x)\n" +msgstr " додела (дужина) : %u (0x%08x)\n" + +#: vms-alpha.c:5749 +#, c-format +msgid " image offset : 0x%08x\n" +msgstr " померај слике: 0x%08x\n" + +#: vms-alpha.c:5751 +#, c-format +msgid " symvec offset : 0x%08x\n" +msgstr " померај симвек-а : 0x%08x\n" + +#: vms-alpha.c:5753 +#, c-format +msgid " name : %.*s\n" +msgstr " назив : %.*s\n" + +#: vms-alpha.c:5766 +#, c-format +msgid "SYM - Global symbol definition\n" +msgstr "SYM — Дефиниција општег симбола\n" + +#: vms-alpha.c:5767 vms-alpha.c:5827 vms-alpha.c:5848 vms-alpha.c:5867 +#, c-format +msgid " flags: 0x%04x" +msgstr " заставице : 0x%04x" + +#: vms-alpha.c:5770 +#, c-format +msgid " psect offset: 0x%08x\n" +msgstr " померај п-одељка: 0x%08x\n" + +#: vms-alpha.c:5774 +#, c-format +msgid " code address: 0x%08x\n" +msgstr " адреса кода: 0x%08x\n" + +#: vms-alpha.c:5776 +#, c-format +msgid " psect index for entry point : %u\n" +msgstr " индекс п-одељка за тачку уноса: %u\n" + +#: vms-alpha.c:5779 vms-alpha.c:5855 vms-alpha.c:5874 +#, c-format +msgid " psect index : %u\n" +msgstr " индекс п-одељка : %u\n" + +#: vms-alpha.c:5781 vms-alpha.c:5857 vms-alpha.c:5876 +#, c-format +msgid " name : %.*s\n" +msgstr " назив : %.*s\n" + +#: vms-alpha.c:5788 +#, c-format +msgid "SYM - Global symbol reference\n" +msgstr "SYM — Упута општег симбола\n" + +#: vms-alpha.c:5800 +#, c-format +msgid "IDC - Ident Consistency check\n" +msgstr "IDC — Провера доследности увлачења\n" + +#: vms-alpha.c:5801 +#, c-format +msgid " flags : 0x%08x" +msgstr " заставице : 0x%08x" + +#: vms-alpha.c:5805 +#, c-format +msgid " id match : %x\n" +msgstr " подударање ид-а : %x\n" + +#: vms-alpha.c:5807 +#, c-format +msgid " error severity: %x\n" +msgstr " озбиљност грешке: %x\n" + +#: vms-alpha.c:5810 +#, c-format +msgid " entity name : %.*s\n" +msgstr " назив ентитета : %.*s\n" + +#: vms-alpha.c:5812 +#, c-format +msgid " object name : %.*s\n" +msgstr " назив објекта : %.*s\n" + +#: vms-alpha.c:5815 +#, c-format +msgid " binary ident : 0x%08x\n" +msgstr " увлачење бинарног : 0x%08x\n" + +#: vms-alpha.c:5818 +#, c-format +msgid " ascii ident : %.*s\n" +msgstr " аскри увлачење : %.*s\n" + +#: vms-alpha.c:5826 +#, c-format +msgid "SYMG - Universal symbol definition\n" +msgstr "SYMG — Дефиниција универзалног симбола\n" + +#: vms-alpha.c:5830 +#, c-format +msgid " symbol vector offset: 0x%08x\n" +msgstr " померај вектора симбола: 0x%08x\n" + +#: vms-alpha.c:5832 +#, c-format +msgid " entry point: 0x%08x\n" +msgstr " тачка уноса: 0x%08x\n" + +#: vms-alpha.c:5834 +#, c-format +msgid " proc descr : 0x%08x\n" +msgstr " описник процеса : 0x%08x\n" + +#: vms-alpha.c:5836 +#, c-format +msgid " psect index: %u\n" +msgstr " индекс п-одељка: %u\n" + +#: vms-alpha.c:5847 +#, c-format +msgid "SYMV - Vectored symbol definition\n" +msgstr "SYMV — Дефиниција векторисаног симбола\n" + +#: vms-alpha.c:5851 +#, c-format +msgid " vector : 0x%08x\n" +msgstr " вектор : 0x%08x\n" + +#: vms-alpha.c:5853 vms-alpha.c:5872 +#, c-format +msgid " psect offset: %u\n" +msgstr " померај п-одељка: %u\n" + +#: vms-alpha.c:5866 +#, c-format +msgid "SYMM - Global symbol definition with version\n" +msgstr "SYMM — Општа дефиниција симбола са верзијом\n" + +#: vms-alpha.c:5870 +#, c-format +msgid " version mask: 0x%08x\n" +msgstr " маска верзије: 0x%08x\n" + +#: vms-alpha.c:5881 +#, c-format +msgid "unhandled egsd entry type %u\n" +msgstr "необрадив „egsd“ унос врсте %u\n" + +#: vms-alpha.c:5915 +#, c-format +msgid " linkage index: %u, replacement insn: 0x%08x\n" +msgstr " индекс повезивања: %u, инструкција премештања: 0x%08x\n" + +#: vms-alpha.c:5918 +#, c-format +msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" +msgstr " индекс п-одељка 1: %u, померај 1: 0x%08x %08x\n" + +#: vms-alpha.c:5922 +#, c-format +msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" +msgstr " индекс п-одељка 2: %u, померај 2: 0x%08x %08x\n" + +#: vms-alpha.c:5927 +#, c-format +msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" +msgstr " индекс п-одељка 3: %u, померај 3: 0x%08x %08x\n" + +#: vms-alpha.c:5932 +#, c-format +msgid " global name: %.*s\n" +msgstr " општи назив: %.*s\n" + +#: vms-alpha.c:5942 +#, c-format +msgid " %s (len=%u+%u):\n" +msgstr " %s (дужина=%u+%u):\n" + +#: vms-alpha.c:5957 +#, c-format +msgid " (type: %3u, size: 4+%3u): " +msgstr " (врста: %3u, величина: 4+%3u): " + +#: vms-alpha.c:5961 +#, c-format +msgid "STA_GBL (stack global) %.*s\n" +msgstr "STA_GBL (општост спремника) %.*s\n" + +#: vms-alpha.c:5965 +#, c-format +msgid "STA_LW (stack longword) 0x%08x\n" +msgstr "STA_LW (дуга реч спремника) 0x%08x\n" + +#: vms-alpha.c:5969 +#, c-format +msgid "STA_QW (stack quadword) 0x%08x %08x\n" +msgstr "STA_QW (четворореч спремника) 0x%08x %08x\n" + +#: vms-alpha.c:5974 +#, c-format +msgid "STA_PQ (stack psect base + offset)\n" +msgstr "STA_PQ (основа п-одељка спремника + померај)\n" + +#: vms-alpha.c:5975 +#, c-format +msgid " psect: %u, offset: 0x%08x %08x\n" +msgstr " п-одељак: %u, померај: 0x%08x %08x\n" + +#: vms-alpha.c:5981 +#, c-format +msgid "STA_LI (stack literal)\n" +msgstr "STA_LI (дословност спремника)\n" + +#: vms-alpha.c:5984 +#, c-format +msgid "STA_MOD (stack module)\n" +msgstr "STA_MOD (модул спремника)\n" + +#: vms-alpha.c:5987 +#, c-format +msgid "STA_CKARG (compare procedure argument)\n" +msgstr "STA_CKARG (аргумент поступка поређења)\n" + +#: vms-alpha.c:5991 +#, c-format +msgid "STO_B (store byte)\n" +msgstr "STO_B (смешта бајт)\n" + +#: vms-alpha.c:5994 +#, c-format +msgid "STO_W (store word)\n" +msgstr "STO_W (смешта реч)\n" + +#: vms-alpha.c:5997 +#, c-format +msgid "STO_LW (store longword)\n" +msgstr "STO_LW (смешта дугу реч)\n" + +#: vms-alpha.c:6000 +#, c-format +msgid "STO_QW (store quadword)\n" +msgstr "STO_QW (смешта четворореч)\n" + +#: vms-alpha.c:6006 +#, c-format +msgid "STO_IMMR (store immediate repeat) %u bytes\n" +msgstr "STO_IMMR (смешта моментално понављање) %u бајта\n" + +#: vms-alpha.c:6013 +#, c-format +msgid "STO_GBL (store global) %.*s\n" +msgstr "STO_GBL (смешта опште) %.*s\n" + +#: vms-alpha.c:6017 +#, c-format +msgid "STO_CA (store code address) %.*s\n" +msgstr "STO_CA (смешта адресу кода) %.*s\n" + +#: vms-alpha.c:6021 +#, c-format +msgid "STO_RB (store relative branch)\n" +msgstr "STO_RB (смешта релативну грану)\n" + +#: vms-alpha.c:6024 +#, c-format +msgid "STO_AB (store absolute branch)\n" +msgstr "STO_AB (смешта апсолутну грану)\n" + +#: vms-alpha.c:6027 +#, c-format +msgid "STO_OFF (store offset to psect)\n" +msgstr "STO_OFF (смешта померај у п-одељак)\n" + +#: vms-alpha.c:6033 +#, c-format +msgid "STO_IMM (store immediate) %u bytes\n" +msgstr "STO_IMM (смешта моментално) %u бајта\n" + +#: vms-alpha.c:6040 +#, c-format +msgid "STO_GBL_LW (store global longword) %.*s\n" +msgstr "STO_GBL_LW (смешта општу дугу реч) %.*s\n" + +#: vms-alpha.c:6044 +#, c-format +msgid "STO_OFF (store LP with procedure signature)\n" +msgstr "STO_OFF (смешта ЛП са потписом поступка)\n" + +#: vms-alpha.c:6047 +#, c-format +msgid "STO_BR_GBL (store branch global) *todo*\n" +msgstr "STO_BR_GBL (смешта општост гране) *урадити*\n" + +#: vms-alpha.c:6050 +#, c-format +msgid "STO_BR_PS (store branch psect + offset) *todo*\n" +msgstr "STO_BR_PS (смешта п-одељак + померај гране) *урадити*\n" + +#: vms-alpha.c:6054 +#, c-format +msgid "OPR_NOP (no-operation)\n" +msgstr "OPR_NOP (без радње)\n" + +#: vms-alpha.c:6057 +#, c-format +msgid "OPR_ADD (add)\n" +msgstr "OPR_ADD (збраја)\n" + +#: vms-alpha.c:6060 +#, c-format +msgid "OPR_SUB (substract)\n" +msgstr "OPR_SUB (одузима)\n" + +#: vms-alpha.c:6063 +#, c-format +msgid "OPR_MUL (multiply)\n" +msgstr "OPR_MUL (множи)\n" + +#: vms-alpha.c:6066 +#, c-format +msgid "OPR_DIV (divide)\n" +msgstr "OPR_DIV (дели)\n" + +#: vms-alpha.c:6069 +#, c-format +msgid "OPR_AND (logical and)\n" +msgstr "OPR_AND (логичко И)\n" + +#: vms-alpha.c:6072 +#, c-format +msgid "OPR_IOR (logical inclusive or)\n" +msgstr "OPR_IOR (логичко укључиво ИЛИ)\n" + +#: vms-alpha.c:6075 +#, c-format +msgid "OPR_EOR (logical exclusive or)\n" +msgstr "OPR_EOR (логичко искључиво ИЛИ)\n" + +#: vms-alpha.c:6078 +#, c-format +msgid "OPR_NEG (negate)\n" +msgstr "OPR_NEG (негација)\n" + +#: vms-alpha.c:6081 +#, c-format +msgid "OPR_COM (complement)\n" +msgstr "OPR_COM (комплемент)\n" + +#: vms-alpha.c:6084 +#, c-format +msgid "OPR_INSV (insert field)\n" +msgstr "OPR_INSV (умеће поље)\n" + +#: vms-alpha.c:6087 +#, c-format +msgid "OPR_ASH (arithmetic shift)\n" +msgstr "OPR_ASH (аритметички помак)\n" + +#: vms-alpha.c:6090 +#, c-format +msgid "OPR_USH (unsigned shift)\n" +msgstr "OPR_USH (помак без знака)\n" + +#: vms-alpha.c:6093 +#, c-format +msgid "OPR_ROT (rotate)\n" +msgstr "OPR_ROT (окреће)\n" + +#: vms-alpha.c:6096 +#, c-format +msgid "OPR_SEL (select)\n" +msgstr "OPR_SEL (бира)\n" + +#: vms-alpha.c:6099 +#, c-format +msgid "OPR_REDEF (redefine symbol to curr location)\n" +msgstr "OPR_REDEF (поново дефинише симбол текуће локације)\n" + +#: vms-alpha.c:6102 +#, c-format +msgid "OPR_REDEF (define a literal)\n" +msgstr "OPR_REDEF (дефинише дословност)\n" + +#: vms-alpha.c:6106 +#, c-format +msgid "STC_LP (store cond linkage pair)\n" +msgstr "STC_LP (смешта пар повезивања услова)\n" + +#: vms-alpha.c:6110 +#, c-format +msgid "STC_LP_PSB (store cond linkage pair + signature)\n" +msgstr "STC_LP_PSB (смешта пар повезивања услова + потпис)\n" + +#: vms-alpha.c:6111 +#, c-format +msgid " linkage index: %u, procedure: %.*s\n" +msgstr " индекс повезивања: %u, поступак: %.*s\n" + +#: vms-alpha.c:6114 +#, c-format +msgid " signature: %.*s\n" +msgstr " потпис: %.*s\n" + +#: vms-alpha.c:6117 +#, c-format +msgid "STC_GBL (store cond global)\n" +msgstr "STC_GBL (смешта општост услова)\n" + +#: vms-alpha.c:6118 +#, c-format +msgid " linkage index: %u, global: %.*s\n" +msgstr " индекс повезивања: %u, опште: %.*s\n" + +#: vms-alpha.c:6122 +#, c-format +msgid "STC_GCA (store cond code address)\n" +msgstr "STC_GCA (смешта адресу кода услова)\n" + +#: vms-alpha.c:6123 +#, c-format +msgid " linkage index: %u, procedure name: %.*s\n" +msgstr " индекс повезивања: %u, назив поступка: %.*s\n" + +#: vms-alpha.c:6127 +#, c-format +msgid "STC_PS (store cond psect + offset)\n" +msgstr "STC_PS (смешта п-одељак + померај услова)\n" + +#: vms-alpha.c:6129 +#, c-format +msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" +msgstr " индекс повезивања: %u, п-одељак: %u, померај: 0x%08x %08x\n" + +#: vms-alpha.c:6136 +#, c-format +msgid "STC_NOP_GBL (store cond NOP at global addr)\n" +msgstr "STC_NOP_GBL (смешта „NOP“ услова на општој адреси)\n" + +#: vms-alpha.c:6140 +#, c-format +msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" +msgstr "STC_NOP_PS (смешта „NOP“ услова на п-одељку + померај)\n" + +#: vms-alpha.c:6144 +#, c-format +msgid "STC_BSR_GBL (store cond BSR at global addr)\n" +msgstr "STC_BSR_GBL (смешта „BSR“ услова на општој адреси)\n" + +#: vms-alpha.c:6148 +#, c-format +msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" +msgstr "STC_BSR_PS (смешта „BSR“ услова на п-одељку + померај)\n" + +#: vms-alpha.c:6152 +#, c-format +msgid "STC_LDA_GBL (store cond LDA at global addr)\n" +msgstr "STC_LDA_GBL (смешта „LDA“ услова на општој адреси)\n" + +#: vms-alpha.c:6156 +#, c-format +msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" +msgstr "STC_LDA_PS (смешта „LDA“ услова на п-одељку + померај)\n" + +#: vms-alpha.c:6160 +#, c-format +msgid "STC_BOH_GBL (store cond BOH at global addr)\n" +msgstr "STC_BOH_GBL (смешта „BOH“ услова на општој адреси)\n" + +#: vms-alpha.c:6164 +#, c-format +msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" +msgstr "STC_BOH_PS (смешта „BOH“ услова на п-одељку + померај)\n" + +#: vms-alpha.c:6169 +#, c-format +msgid "STC_NBH_GBL (store cond or hint at global addr)\n" +msgstr "STC_NBH_GBL (смешта услов или најаву на општој адреси)\n" + +#: vms-alpha.c:6173 +#, c-format +msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" +msgstr "STC_NBH_PS (смешта услов или најаву на п-одељку + померај)\n" + +#: vms-alpha.c:6177 +#, c-format +msgid "CTL_SETRB (set relocation base)\n" +msgstr "CTL_SETRB (поставља основу премештања)\n" + +#: vms-alpha.c:6183 +#, c-format +msgid "CTL_AUGRB (augment relocation base) %u\n" +msgstr "CTL_AUGRB (повећава основу премештања) %u\n" + +#: vms-alpha.c:6187 +#, c-format +msgid "CTL_DFLOC (define location)\n" +msgstr "CTL_DFLOC (дефинише место)\n" + +#: vms-alpha.c:6190 +#, c-format +msgid "CTL_STLOC (set location)\n" +msgstr "CTL_STLOC (поставља место)\n" + +#: vms-alpha.c:6193 +#, c-format +msgid "CTL_STKDL (stack defined location)\n" +msgstr "CTL_STKDL (спремником дефинисано место)\n" + +#: vms-alpha.c:6196 vms-alpha.c:6610 +#, c-format +msgid "*unhandled*\n" +msgstr "*необрадиво*\n" + +#: vms-alpha.c:6226 vms-alpha.c:6265 +#, c-format +msgid "cannot read GST record length\n" +msgstr "не могу да читам дужину „GST“ записа\n" + +#. Ill-formed. +#: vms-alpha.c:6247 +#, c-format +msgid "cannot find EMH in first GST record\n" +msgstr "не могу да нађем „EMH“ у првом „GST“ запису\n" + +#: vms-alpha.c:6273 +#, c-format +msgid "cannot read GST record header\n" +msgstr "не могу да прочитам заглавље „GST“ записа\n" + +#: vms-alpha.c:6286 +#, c-format +msgid " corrupted GST\n" +msgstr " оштећено „GST“\n" + +#: vms-alpha.c:6294 +#, c-format +msgid "cannot read GST record\n" +msgstr "не могу да читам „GST“ запис\n" + +#: vms-alpha.c:6323 +#, c-format +msgid " unhandled EOBJ record type %u\n" +msgstr " необрадив „EOBJ“ унос врсте %u\n" + +#: vms-alpha.c:6346 +#, c-format +msgid " bitcount: %u, base addr: 0x%08x\n" +msgstr " број бита: %u, основна адреса: 0x%08x\n" + +#: vms-alpha.c:6359 +#, c-format +msgid " bitmap: 0x%08x (count: %u):\n" +msgstr " мапа бита: 0x%08x (укупно: %u):\n" + +#: vms-alpha.c:6366 +#, c-format +msgid " %08x" +msgstr " %08x" + +#: vms-alpha.c:6391 +#, c-format +msgid " image %u (%u entries)\n" +msgstr " слика %u (%u уноса)\n" + +#: vms-alpha.c:6396 +#, c-format +msgid " offset: 0x%08x, val: 0x%08x\n" +msgstr " померај: 0x%08x, вредност: 0x%08x\n" + +#: vms-alpha.c:6417 +#, c-format +msgid " image %u (%u entries), offsets:\n" +msgstr " слика %u (%u уноса), померај:\n" + +#: vms-alpha.c:6424 +#, c-format +msgid " 0x%08x" +msgstr " 0x%08x" + +#. 64 bits. +#: vms-alpha.c:6546 +#, c-format +msgid "64 bits *unhandled*\n" +msgstr "64 бита *није подржано*\n" + +#: vms-alpha.c:6550 +#, c-format +msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" +msgstr "класа: %u, д-врста: %u, дужина: %u, показивач: 0x%08x\n" + +#: vms-alpha.c:6561 +#, c-format +msgid "non-contiguous array of %s\n" +msgstr "низ „%s“ није непрекидан\n" + +#: vms-alpha.c:6565 +#, c-format +msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" +msgstr "димцт: %u, а-заставице: 0x%02x, цифре: %u, размера: %u\n" + +#: vms-alpha.c:6569 +#, c-format +msgid "arsize: %u, a0: 0x%08x\n" +msgstr "ар-величина: %u, a0: 0x%08x\n" + +#: vms-alpha.c:6573 +#, c-format +msgid "Strides:\n" +msgstr "Кораци:\n" + +#: vms-alpha.c:6578 +#, c-format +msgid "[%u]: %u\n" +msgstr "[%u]: %u\n" + +#: vms-alpha.c:6583 +#, c-format +msgid "Bounds:\n" +msgstr "Границе:\n" + +#: vms-alpha.c:6588 +#, c-format +msgid "[%u]: Lower: %u, upper: %u\n" +msgstr "[%u]: Доња: %u, горња: %u\n" + +#: vms-alpha.c:6600 +#, c-format +msgid "unaligned bit-string of %s\n" +msgstr "ниска бита „%s“ није поравната\n" + +#: vms-alpha.c:6604 +#, c-format +msgid "base: %u, pos: %u\n" +msgstr "основа: %u, положај: %u\n" + +#: vms-alpha.c:6624 +#, c-format +msgid "vflags: 0x%02x, value: 0x%08x " +msgstr "в-заставице: 0x%02x, вредност: 0x%08x " + +#: vms-alpha.c:6630 +#, c-format +msgid "(no value)\n" +msgstr "(без вредности)\n" + +#: vms-alpha.c:6633 +#, c-format +msgid "(not active)\n" +msgstr "(није активно)\n" + +#: vms-alpha.c:6636 +#, c-format +msgid "(not allocated)\n" +msgstr "(није додељено)\n" + +#: vms-alpha.c:6639 +#, c-format +msgid "(descriptor)\n" +msgstr "(описник)\n" + +#: vms-alpha.c:6643 +#, c-format +msgid "(trailing value)\n" +msgstr "(пратећа вредност)\n" + +#: vms-alpha.c:6646 +#, c-format +msgid "(value spec follows)\n" +msgstr "(спецификација следеће вредности)\n" + +#: vms-alpha.c:6649 +#, c-format +msgid "(at bit offset %u)\n" +msgstr "(померај бита %u)\n" + +#: vms-alpha.c:6652 +#, c-format +msgid "(reg: %u, disp: %u, indir: %u, kind: " +msgstr "(регистар: %u, размештај: %u, индиректно: %u, врста: " + +#: vms-alpha.c:6659 +msgid "literal" +msgstr "дословност" + +#: vms-alpha.c:6662 +msgid "address" +msgstr "адреса" + +#: vms-alpha.c:6665 +msgid "desc" +msgstr "опис" + +#: vms-alpha.c:6668 +msgid "reg" +msgstr "рег" + +#: vms-alpha.c:6743 +#, c-format +msgid "Debug symbol table:\n" +msgstr "Табела симбола прочишћавања:\n" + +#: vms-alpha.c:6754 +#, c-format +msgid "cannot read DST header\n" +msgstr "не могу да читам „GST“ заглавље\n" + +#: vms-alpha.c:6759 +#, c-format +msgid " type: %3u, len: %3u (at 0x%08x): " +msgstr " врста: %3u, дужина: %3u (при 0x%08x): " + +#: vms-alpha.c:6773 +#, c-format +msgid "cannot read DST symbol\n" +msgstr "не могу да читам „DST“ симбол\n" + +#: vms-alpha.c:6816 +#, c-format +msgid "standard data: %s\n" +msgstr "стандардни подаци: %s\n" + +#: vms-alpha.c:6819 vms-alpha.c:6903 +#, c-format +msgid " name: %.*s\n" +msgstr " назив: %.*s\n" + +#: vms-alpha.c:6826 +#, c-format +msgid "modbeg\n" +msgstr "почетак модула\n" + +#: vms-alpha.c:6827 +#, c-format +msgid " flags: %d, language: %u, major: %u, minor: %u\n" +msgstr " заставице: %d, језик: %u, већи: %u, мањи: %u\n" + +#: vms-alpha.c:6833 vms-alpha.c:7099 +#, c-format +msgid " module name: %.*s\n" +msgstr " назив модула : %.*s\n" + +#: vms-alpha.c:6836 +#, c-format +msgid " compiler : %.*s\n" +msgstr " преводилац : %.*s\n" + +#: vms-alpha.c:6841 +#, c-format +msgid "modend\n" +msgstr "крај модула\n" + +#: vms-alpha.c:6848 +msgid "rtnbeg\n" +msgstr "почетак рутине\n" + +#: vms-alpha.c:6849 +#, c-format +msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" +msgstr " заставице: %u, адреса: 0x%08x, пд-адреса: 0x%08x\n" + +#: vms-alpha.c:6854 +#, c-format +msgid " routine name: %.*s\n" +msgstr " назив рутине : %.*s\n" + +#: vms-alpha.c:6862 +#, c-format +msgid "rtnend: size 0x%08x\n" +msgstr "крај рутине: величина 0x%08x\n" + +#: vms-alpha.c:6870 +#, c-format +msgid "prolog: bkpt address 0x%08x\n" +msgstr "пролог: бкпт адреса 0x%08x\n" + +#: vms-alpha.c:6878 +#, c-format +msgid "epilog: flags: %u, count: %u\n" +msgstr "епилог: заставице: %u, број: %u\n" + +#: vms-alpha.c:6887 +#, c-format +msgid "blkbeg: address: 0x%08x, name: %.*s\n" +msgstr "блк почетак: адреса: 0x%08x, назив: %.*s\n" + +#: vms-alpha.c:6896 +#, c-format +msgid "blkend: size: 0x%08x\n" +msgstr "блк крај: величина: 0x%08x\n" + +#: vms-alpha.c:6902 +#, c-format +msgid "typspec (len: %u)\n" +msgstr "одредба врсте (дужина: %u)\n" + +#: vms-alpha.c:6909 +#, c-format +msgid "septyp, name: %.*s\n" +msgstr "врста поставке, назив: %.*s\n" + +#: vms-alpha.c:6918 +#, c-format +msgid "recbeg: name: %.*s\n" +msgstr "почетак записа: назив: %.*s\n" + +#: vms-alpha.c:6925 +#, c-format +msgid "recend\n" +msgstr "крај записа\n" + +#: vms-alpha.c:6928 +#, c-format +msgid "enumbeg, len: %u, name: %.*s\n" +msgstr "почетак бројања, дужина: %u, назив: %.*s\n" + +#: vms-alpha.c:6932 +#, c-format +msgid "enumelt, name: %.*s\n" +msgstr "елементи бројања, назив: %.*s\n" + +#: vms-alpha.c:6936 +#, c-format +msgid "enumend\n" +msgstr "крај бројања\n" + +#: vms-alpha.c:6953 +#, c-format +msgid "discontiguous range (nbr: %u)\n" +msgstr "непрекидни опсег (бр.: %u)\n" + +#: vms-alpha.c:6955 +#, c-format +msgid " address: 0x%08x, size: %u\n" +msgstr " адреса: 0x%08x, величина: %u\n" + +#: vms-alpha.c:6965 +#, c-format +msgid "line num (len: %u)\n" +msgstr "број реда (дужина: %u)\n" + +#: vms-alpha.c:6982 +#, c-format +msgid "delta_pc_w %u\n" +msgstr "delta_pc_w %u\n" + +#: vms-alpha.c:6989 +#, c-format +msgid "incr_linum(b): +%u\n" +msgstr "incr_linum(b): +%u\n" + +#: vms-alpha.c:6995 +#, c-format +msgid "incr_linum_w: +%u\n" +msgstr "incr_linum_w: +%u\n" + +#: vms-alpha.c:7001 +#, c-format +msgid "incr_linum_l: +%u\n" +msgstr "incr_linum_l: +%u\n" + +#: vms-alpha.c:7007 +#, c-format +msgid "set_line_num(w) %u\n" +msgstr "set_line_num(w) %u\n" + +#: vms-alpha.c:7012 +#, c-format +msgid "set_line_num_b %u\n" +msgstr "set_line_num_b %u\n" + +#: vms-alpha.c:7017 +#, c-format +msgid "set_line_num_l %u\n" +msgstr "set_line_num_l %u\n" + +#: vms-alpha.c:7022 +#, c-format +msgid "set_abs_pc: 0x%08x\n" +msgstr "set_abs_pc: 0x%08x\n" + +#: vms-alpha.c:7026 +#, c-format +msgid "delta_pc_l: +0x%08x\n" +msgstr "delta_pc_l: +0x%08x\n" + +#: vms-alpha.c:7031 +#, c-format +msgid "term(b): 0x%02x" +msgstr "term(b): 0x%02x" + +#: vms-alpha.c:7033 +#, c-format +msgid " pc: 0x%08x\n" +msgstr " pc: 0x%08x\n" + +#: vms-alpha.c:7038 +#, c-format +msgid "term_w: 0x%04x" +msgstr "term_w: 0x%04x" + +#: vms-alpha.c:7040 +#, c-format +msgid " pc: 0x%08x\n" +msgstr " pc: 0x%08x\n" + +#: vms-alpha.c:7046 +#, c-format +msgid "delta pc +%-4d" +msgstr "delta pc +%-4d" + +#: vms-alpha.c:7049 +#, c-format +msgid " pc: 0x%08x line: %5u\n" +msgstr " pc: 0x%08x ред: %5u\n" + +#: vms-alpha.c:7054 +#, c-format +msgid " *unhandled* cmd %u\n" +msgstr " *необрадива* наредба „%u“\n" + +#: vms-alpha.c:7069 +#, c-format +msgid "source (len: %u)\n" +msgstr "извор (дужина: %u)\n" + +#: vms-alpha.c:7083 +#, c-format +msgid " declfile: len: %u, flags: %u, fileid: %u\n" +msgstr " declfile: дужина: %u, заставице: %u, ид поља: %u\n" + +#: vms-alpha.c:7087 +#, c-format +msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" +msgstr " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" + +#: vms-alpha.c:7096 +#, c-format +msgid " filename : %.*s\n" +msgstr " назив датотеке: %.*s\n" + +#: vms-alpha.c:7105 +#, c-format +msgid " setfile %u\n" +msgstr " setfile %u\n" + +#: vms-alpha.c:7110 vms-alpha.c:7115 +#, c-format +msgid " setrec %u\n" +msgstr " setrec %u\n" + +#: vms-alpha.c:7120 vms-alpha.c:7125 +#, c-format +msgid " setlnum %u\n" +msgstr " setlnum %u\n" + +#: vms-alpha.c:7130 vms-alpha.c:7135 +#, c-format +msgid " deflines %u\n" +msgstr " deflines %u\n" + +#: vms-alpha.c:7139 +#, c-format +msgid " formfeed\n" +msgstr " formfeed\n" + +#: vms-alpha.c:7143 +#, c-format +msgid " *unhandled* cmd %u\n" +msgstr " *необрадива* наредба „%u“\n" + +#: vms-alpha.c:7155 +#, c-format +msgid "*unhandled* dst type %u\n" +msgstr "*необрадива* дст врста „%u“\n" + +#: vms-alpha.c:7187 +#, c-format +msgid "cannot read EIHD\n" +msgstr "не могу да читам „EIHD“\n" + +#: vms-alpha.c:7190 +#, c-format +msgid "EIHD: (size: %u, nbr blocks: %u)\n" +msgstr "EIHD: (величина: %u, број блокова: %u)\n" + +#: vms-alpha.c:7193 +#, c-format +msgid " majorid: %u, minorid: %u\n" +msgstr " већи ид: %u, мањи ид: %u\n" + +#: vms-alpha.c:7201 +msgid "executable" +msgstr "извршна" + +#: vms-alpha.c:7204 +msgid "linkable image" +msgstr "повезива слика" + +#: vms-alpha.c:7210 +#, c-format +msgid " image type: %u (%s)" +msgstr " врста слике: %u (%s)" + +#: vms-alpha.c:7216 +msgid "native" +msgstr "изворна" + +#: vms-alpha.c:7219 +msgid "CLI" +msgstr "КЛИ" + +#: vms-alpha.c:7225 +#, c-format +msgid ", subtype: %u (%s)\n" +msgstr ", подврста: %u (%s)\n" + +#: vms-alpha.c:7231 +#, c-format +msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" +msgstr " помераји: исд: %u, активно: %u, проч симб: %u, ид слике: %u, закрпа: %u\n" + +#: vms-alpha.c:7235 +#, c-format +msgid " fixup info rva: " +msgstr " поправка инфо рва: " + +#: vms-alpha.c:7237 +#, c-format +msgid ", symbol vector rva: " +msgstr ", вектор симбола рва: " + +#: vms-alpha.c:7240 +#, c-format +msgid "" +"\n" +" version array off: %u\n" +msgstr "" +"\n" +" померај низа верзије: %u\n" + +#: vms-alpha.c:7244 +#, c-format +msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" +msgstr " број У/И слике: %u, бр. канала: %u, рек при: %08x%08x\n" + +#: vms-alpha.c:7250 +#, c-format +msgid " linker flags: %08x:" +msgstr " заставице повезивача: %08x:" + +#: vms-alpha.c:7280 +#, c-format +msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" +msgstr " увлачење: 0x%08x, верзија система: 0x%08x, поклопљено ктрл: %u, величина симвектора: %u\n" + +#: vms-alpha.c:7286 +#, c-format +msgid " BPAGE: %u" +msgstr " БСТРАНИЦА: %u" + +#: vms-alpha.c:7292 +#, c-format +msgid ", ext fixup offset: %u, no_opt psect off: %u" +msgstr ", померај спољне исправке: %u, померај п-одељка „no_opt“-а: %u" + +#: vms-alpha.c:7295 +#, c-format +msgid ", alias: %u\n" +msgstr ", алијас: %u\n" + +#: vms-alpha.c:7303 +#, c-format +msgid "system version array information:\n" +msgstr "низ података верзије система:\n" + +#: vms-alpha.c:7307 +#, c-format +msgid "cannot read EIHVN header\n" +msgstr "не могу да читам „EIHVN“ заглавље\n" + +#: vms-alpha.c:7317 +#, c-format +msgid "cannot read EIHVN version\n" +msgstr "не могу да читам „EIHVN“ издање\n" + +#: vms-alpha.c:7320 +#, c-format +msgid " %02u " +msgstr " %02u " + +#: vms-alpha.c:7324 +msgid "BASE_IMAGE " +msgstr "СЛИКА_ОСНОВЕ " + +#: vms-alpha.c:7327 +msgid "MEMORY_MANAGEMENT" +msgstr "УПРАВЉАЊЕ_МЕМОРИЈОМ" + +#: vms-alpha.c:7330 +msgid "IO " +msgstr "УИ " + +#: vms-alpha.c:7333 +msgid "FILES_VOLUMES " +msgstr "ВОЛУМЕНИ_ДАТОТЕКА " + +#: vms-alpha.c:7336 +msgid "PROCESS_SCHED " +msgstr "ЗАКАЗАНИ_ПРОЦЕСИ " + +#: vms-alpha.c:7339 +msgid "SYSGEN " +msgstr "СТВАРАЊЕ_СИСТЕМА " + +#: vms-alpha.c:7342 +msgid "CLUSTERS_LOCKMGR " +msgstr "МГРЗАКЉУЧАВАЊЕ_КЛАСТЕРА " + +#: vms-alpha.c:7345 +msgid "LOGICAL_NAMES " +msgstr "ЛОГИЧКИ_НАЗИВИ " + +#: vms-alpha.c:7348 +msgid "SECURITY " +msgstr "БЕЗБЕДНОСТ " + +#: vms-alpha.c:7351 +msgid "IMAGE_ACTIVATOR " +msgstr "ПОКРЕТАЧ_СЛИКЕ " + +#: vms-alpha.c:7354 +msgid "NETWORKS " +msgstr "МРЕЖЕ " + +#: vms-alpha.c:7357 +msgid "COUNTERS " +msgstr "БРОЈАЧИ " + +#: vms-alpha.c:7360 +msgid "STABLE " +msgstr "СТАБИЛНО " + +#: vms-alpha.c:7363 +msgid "MISC " +msgstr "РАЗНО " + +#: vms-alpha.c:7366 +msgid "CPU " +msgstr "ЦПУ " + +#: vms-alpha.c:7369 +msgid "VOLATILE " +msgstr "ПРОМЕНЉИВО " + +#: vms-alpha.c:7372 +msgid "SHELL " +msgstr "ШКОЉКА " + +#: vms-alpha.c:7375 +msgid "POSIX " +msgstr "ПОСИКС " + +#: vms-alpha.c:7378 +msgid "MULTI_PROCESSING " +msgstr "ВИШЕ_ОБРАДНО " + +#: vms-alpha.c:7381 +msgid "GALAXY " +msgstr "ГАЛАКСИЈА " + +#: vms-alpha.c:7384 +msgid "*unknown* " +msgstr "*непознато* " + +#: vms-alpha.c:7387 +#, c-format +msgid ": %u.%u\n" +msgstr ": %u.%u\n" + +#: vms-alpha.c:7400 vms-alpha.c:7659 +#, c-format +msgid "cannot read EIHA\n" +msgstr "не могу да читам „EIHA“\n" + +#: vms-alpha.c:7403 +#, c-format +msgid "Image activation: (size=%u)\n" +msgstr "Активирање слике: (величина=%u)\n" + +#: vms-alpha.c:7405 +#, c-format +msgid " First address : 0x%08x 0x%08x\n" +msgstr " Прва адреса : 0x%08x 0x%08x\n" + +#: vms-alpha.c:7408 +#, c-format +msgid " Second address: 0x%08x 0x%08x\n" +msgstr " Друга адреса : 0x%08x 0x%08x\n" + +#: vms-alpha.c:7411 +#, c-format +msgid " Third address : 0x%08x 0x%08x\n" +msgstr " Трећа адреса : 0x%08x 0x%08x\n" + +#: vms-alpha.c:7414 +#, c-format +msgid " Fourth address: 0x%08x 0x%08x\n" +msgstr " Четврта адреса : 0x%08x 0x%08x\n" + +#: vms-alpha.c:7417 +#, c-format +msgid " Shared image : 0x%08x 0x%08x\n" +msgstr " Дељена слика : 0x%08x 0x%08x\n" + +#: vms-alpha.c:7428 +#, c-format +msgid "cannot read EIHI\n" +msgstr "не могу да читам „EIHI“\n" + +#: vms-alpha.c:7431 +#, c-format +msgid "Image identification: (major: %u, minor: %u)\n" +msgstr "Препознавање слике: (веће: %u, мање: %u)\n" + +#: vms-alpha.c:7434 +#, c-format +msgid " image name : %.*s\n" +msgstr " назив слике : %.*s\n" + +#: vms-alpha.c:7436 +#, c-format +msgid " link time : %s\n" +msgstr " време везивања : %s\n" + +#: vms-alpha.c:7438 +#, c-format +msgid " image ident : %.*s\n" +msgstr " увлачење слике : %.*s\n" + +#: vms-alpha.c:7440 +#, c-format +msgid " linker ident : %.*s\n" +msgstr " увлачење повезивача : %.*s\n" + +#: vms-alpha.c:7442 +#, c-format +msgid " image build ident: %.*s\n" +msgstr " увлачење изградње слике: %.*s\n" + +#: vms-alpha.c:7452 +#, c-format +msgid "cannot read EIHS\n" +msgstr "не могу да читам „EIHS“\n" + +#: vms-alpha.c:7455 +#, c-format +msgid "Image symbol & debug table: (major: %u, minor: %u)\n" +msgstr "Симбол слике и табела прочишћавања: (веће: %u, мање: %u)\n" + +#: vms-alpha.c:7460 +#, c-format +msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" +msgstr " табела симбола прочишћавања : вбн: %u, величина: %u (0x%x)\n" + +#: vms-alpha.c:7464 +#, c-format +msgid " global symbol table: vbn: %u, records: %u\n" +msgstr " табела општег симбола: вбн: %u, записи: %u\n" + +#: vms-alpha.c:7468 +#, c-format +msgid " debug module table : vbn: %u, size: %u\n" +msgstr " табела модула прочишћавања: вбн: %u, величина: %u\n" + +#: vms-alpha.c:7481 +#, c-format +msgid "cannot read EISD\n" +msgstr "не могу да читам „EISD“\n" + +#: vms-alpha.c:7491 +#, c-format +msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" +msgstr "Описник одељка слике: (већи: %u, мањи: %u, величина: %u, померај: %u)\n" + +#: vms-alpha.c:7498 +#, c-format +msgid " section: base: 0x%08x%08x size: 0x%08x\n" +msgstr " одељак: основа: 0x%08x%08x величина: 0x%08x\n" + +#: vms-alpha.c:7503 +#, c-format +msgid " flags: 0x%04x" +msgstr " заставице : 0x%04x" + +#: vms-alpha.c:7540 +#, c-format +msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" +msgstr " вбн: %u, пфц: %u, пореди_цтл: %u врста: %u (" + +#: vms-alpha.c:7546 +msgid "NORMAL" +msgstr "NORMAL" + +#: vms-alpha.c:7549 +msgid "SHRFXD" +msgstr "SHRFXD" + +#: vms-alpha.c:7552 +msgid "PRVFXD" +msgstr "PRVFXD" + +#: vms-alpha.c:7555 +msgid "SHRPIC" +msgstr "SHRPIC" + +#: vms-alpha.c:7558 +msgid "PRVPIC" +msgstr "PRVPIC" + +#: vms-alpha.c:7561 +msgid "USRSTACK" +msgstr "USRSTACK" + +#: vms-alpha.c:7567 +msgid ")\n" +msgstr ")\n" + +#: vms-alpha.c:7569 +#, c-format +msgid " ident: 0x%08x, name: %.*s\n" +msgstr " увлачење: 0x%08x, назив: %.*s\n" + +#: vms-alpha.c:7579 +#, c-format +msgid "cannot read DMT\n" +msgstr "не могу да читам „DMT“\n" + +#: vms-alpha.c:7583 +#, c-format +msgid "Debug module table:\n" +msgstr "Табела модула прочишћавања:\n" + +#: vms-alpha.c:7592 +#, c-format +msgid "cannot read DMT header\n" +msgstr "не могу да читам „DMT“ заглавље\n" + +#: vms-alpha.c:7597 +#, c-format +msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" +msgstr " померај модула: 0x%08x, величина: 0x%08x, (%u п-одељака)\n" + +#: vms-alpha.c:7607 +#, c-format +msgid "cannot read DMT psect\n" +msgstr "не могу да читам „DMT“ п-одељак\n" + +#: vms-alpha.c:7610 +#, c-format +msgid " psect start: 0x%08x, length: %u\n" +msgstr " почетак п-одељка: 0x%08x, дужина: %u\n" + +#: vms-alpha.c:7623 +#, c-format +msgid "cannot read DST\n" +msgstr "не могу да читам „DST“\n" + +#: vms-alpha.c:7633 +#, c-format +msgid "cannot read GST\n" +msgstr "не могу да читам „GST“\n" + +#: vms-alpha.c:7637 +#, c-format +msgid "Global symbol table:\n" +msgstr "Табела општих симбола:\n" + +#: vms-alpha.c:7665 +#, c-format +msgid "Image activator fixup: (major: %u, minor: %u)\n" +msgstr "Исправка покретача слике: (већи: %u, мањи: %u)\n" + +#: vms-alpha.c:7668 +#, c-format +msgid " iaflink : 0x%08x %08x\n" +msgstr " иаф веза : 0x%08x %08x\n" + +#: vms-alpha.c:7671 +#, c-format +msgid " fixuplnk: 0x%08x %08x\n" +msgstr " веза исправке: 0x%08x %08x\n" + +#: vms-alpha.c:7674 +#, c-format +msgid " size : %u\n" +msgstr " величина : %u\n" + +#: vms-alpha.c:7676 +#, c-format +msgid " flags: 0x%08x\n" +msgstr " заставице : 0x%08x\n" + +#: vms-alpha.c:7680 +#, c-format +msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" +msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n" + +#: vms-alpha.c:7684 +#, c-format +msgid " qdotadroff: %5u, ldotadroff: %5u\n" +msgstr " qdotadroff: %5u, ldotadroff: %5u\n" + +#: vms-alpha.c:7688 +#, c-format +msgid " codeadroff: %5u, lpfixoff : %5u\n" +msgstr " codeadroff: %5u, lpfixoff : %5u\n" + +#: vms-alpha.c:7691 +#, c-format +msgid " chgprtoff : %5u\n" +msgstr " chgprtoff : %5u\n" + +#: vms-alpha.c:7694 +#, c-format +msgid " shlstoff : %5u, shrimgcnt : %5u\n" +msgstr " shlstoff : %5u, shrimgcnt : %5u\n" + +#: vms-alpha.c:7696 +#, c-format +msgid " shlextra : %5u, permctx : %5u\n" +msgstr " shlextra : %5u, permctx : %5u\n" + +#: vms-alpha.c:7699 +#, c-format +msgid " base_va : 0x%08x\n" +msgstr " base_va : 0x%08x\n" + +#: vms-alpha.c:7701 +#, c-format +msgid " lppsbfixoff: %5u\n" +msgstr " lppsbfixoff: %5u\n" + +#: vms-alpha.c:7709 +#, c-format +msgid " Shareable images:\n" +msgstr " Дељиве слике:\n" + +#: vms-alpha.c:7713 +#, c-format +msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" +msgstr " %u: величина: %u, заставице: 0x%02x, назив: %.*s\n" + +#: vms-alpha.c:7720 +#, c-format +msgid " quad-word relocation fixups:\n" +msgstr " исправке премештања четворо-речи:\n" + +#: vms-alpha.c:7725 +#, c-format +msgid " long-word relocation fixups:\n" +msgstr " исправке премештања дуге-речи:\n" + +#: vms-alpha.c:7730 +#, c-format +msgid " quad-word .address reference fixups:\n" +msgstr " исправке „.address“ упуте четворо-речи:\n" + +#: vms-alpha.c:7735 +#, c-format +msgid " long-word .address reference fixups:\n" +msgstr " исправке „.address“ упуте дуге-речи:\n" + +#: vms-alpha.c:7740 +#, c-format +msgid " Code Address Reference Fixups:\n" +msgstr " Исправке упуте адресе кода:\n" + +#: vms-alpha.c:7745 +#, c-format +msgid " Linkage Pairs Reference Fixups:\n" +msgstr " Исправке упуте парова повезивања:\n" + +#: vms-alpha.c:7754 +#, c-format +msgid " Change Protection (%u entries):\n" +msgstr " Промена заштите (%u уноса):\n" + +#: vms-alpha.c:7759 +#, c-format +msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " +msgstr " основа: 0x%08x %08x, величина: 0x%08x, заштита: 0x%08x " + +#. FIXME: we do not yet support relocatable link. It is not obvious +#. how to do it for debug infos. +#: vms-alpha.c:8599 +msgid "%P: relocatable link is not supported\n" +msgstr "%P: преместива веза није подржана\n" + +#: vms-alpha.c:8669 +msgid "%P: multiple entry points: in modules %B and %B\n" +msgstr "%P: тачке више уноса: у модулима „%B“ и „%B“\n" + +#: vms-lib.c:1444 +#, c-format +msgid "could not open shared image '%s' from '%s'" +msgstr "не могу да отворим дељену слику „%s“ из „%s“" + +#: vms-misc.c:360 +msgid "_bfd_vms_output_counted called with zero bytes" +msgstr "„_bfd_vms_output_counted“ је позвано са нула бајтова" + +#: vms-misc.c:365 +msgid "_bfd_vms_output_counted called with too many bytes" +msgstr "„_bfd_vms_output_counted“ је позвано са превише бајтова" + +#: xcofflink.c:824 +#, c-format +msgid "%s: XCOFF shared object when not producing XCOFF output" +msgstr "%s: „XCOFF“ дељени објекат када се не производи „XCOFF“ излаз" + +#: xcofflink.c:845 +#, c-format +msgid "%s: dynamic object with no .loader section" +msgstr "%s: динамички објекат без „.loader“ одељка" + +#: xcofflink.c:1404 +msgid "%B: `%s' has line numbers but no enclosing section" +msgstr "%B: „%s“ има бројеве редова али не и затварајући одељак" + +#: xcofflink.c:1456 +msgid "%B: class %d symbol `%s' has no aux entries" +msgstr "%B: класа %d симбола „%s“ нема помоћних уноса" + +#: xcofflink.c:1478 +msgid "%B: symbol `%s' has unrecognized csect type %d" +msgstr "%B: симбол „%s“ има непознату врсту цсектора „%d“" + +#: xcofflink.c:1490 +msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" +msgstr "%B: лош „XTY_ER“ симбол „%s“: класа %d сцброј %d сцндужине %d" + +#: xcofflink.c:1519 +msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" +msgstr "%B: „XMC_TC0“ симбол „%s“ је класа %d сцндужине %d" + +#: xcofflink.c:1665 +msgid "%B: csect `%s' not in enclosing section" +msgstr "%B: ц-одељак „%s“ није у затварајућем одељку" + +#: xcofflink.c:1772 +msgid "%B: misplaced XTY_LD `%s'" +msgstr "%B: лоше постављено „XTY_LD“ „%s“" + +#: xcofflink.c:2091 +msgid "%B: reloc %s:%d not in csect" +msgstr "%B: премештање „%s:%d“ није у ц-одељку" + +#: xcofflink.c:3182 +#, c-format +msgid "%s: no such symbol" +msgstr "%s: нема таквог симбола" + +#: xcofflink.c:3287 +#, c-format +msgid "warning: attempt to export undefined symbol `%s'" +msgstr "упозорење: покушај извоза недефинисаног симбола „%s“" + +#: xcofflink.c:3666 +msgid "error: undefined symbol __rtinit" +msgstr "грешка: симбол „__rtinit“ није дефинисан" + +#: xcofflink.c:4045 +msgid "%B: loader reloc in unrecognized section `%s'" +msgstr "%B: премештање утоваривача у непознатом одељку „%s“" + +#: xcofflink.c:4056 +msgid "%B: `%s' in loader reloc but not loader sym" +msgstr "%B: „%s“ је у премештању утоваривача али није симбол утоваривача" + +#: xcofflink.c:4072 +msgid "%B: loader reloc in read-only section %A" +msgstr "%B: премештање утоваривача у одељку само за читање „%A“" + +#: xcofflink.c:5094 +#, c-format +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" +msgstr "Прекорачење табеле садржаја: 0x%lx > 0x10000; пробајте са „-mminimal-toc“ приликом превођења" + +#: peigen.c:1009 pepigen.c:1009 pex64igen.c:1009 +#, c-format +msgid "%s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: прекорачење броја редова: 0x%lx > 0xffff" + +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 +msgid "Export Directory [.edata (or where ever we found it)]" +msgstr "Директоријум извоза [„.edata“ (или тамо где смо га нашли)]" + +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 +msgid "Import Directory [parts of .idata]" +msgstr "Директоријум увоза [део „.idata“]" + +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 +msgid "Resource Directory [.rsrc]" +msgstr "Директоријум изворишта [.rsrc]" + +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 +msgid "Exception Directory [.pdata]" +msgstr "Директоријум изузетака [.pdata]" + +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +msgid "Security Directory" +msgstr "Директоријум безбедности" + +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 +msgid "Base Relocation Directory [.reloc]" +msgstr "Директоријум премештања основе [.reloc]" + +#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042 +msgid "Debug Directory" +msgstr "Директоријум прочишћавања" + +#: peigen.c:1043 pepigen.c:1043 pex64igen.c:1043 +msgid "Description Directory" +msgstr "Директоријум описа" + +#: peigen.c:1044 pepigen.c:1044 pex64igen.c:1044 +msgid "Special Directory" +msgstr "Директоријум посебности" + +#: peigen.c:1045 pepigen.c:1045 pex64igen.c:1045 +msgid "Thread Storage Directory [.tls]" +msgstr "Директоријум смештаја нити [.tls]" + +#: peigen.c:1046 pepigen.c:1046 pex64igen.c:1046 +msgid "Load Configuration Directory" +msgstr "Директоријум подешавања учитавања" + +#: peigen.c:1047 pepigen.c:1047 pex64igen.c:1047 +msgid "Bound Import Directory" +msgstr "Директоријум увоза свеза" + +#: peigen.c:1048 pepigen.c:1048 pex64igen.c:1048 +msgid "Import Address Table Directory" +msgstr "Директоријум табеле увоза адресе" + +#: peigen.c:1049 pepigen.c:1049 pex64igen.c:1049 +msgid "Delay Import Directory" +msgstr "Директоријум застоја увоза" + +#: peigen.c:1050 pepigen.c:1050 pex64igen.c:1050 +msgid "CLR Runtime Header" +msgstr "Заглавље ЦЛР извршавања" + +#: peigen.c:1051 pepigen.c:1051 pex64igen.c:1051 +msgid "Reserved" +msgstr "Резервисано" + +#: peigen.c:1111 pepigen.c:1111 pex64igen.c:1111 +#, c-format +msgid "" +"\n" +"There is an import table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Постоји табела увоза, али не могу да нађем одељак који је садржи\n" + +#: peigen.c:1116 pepigen.c:1116 pex64igen.c:1116 +#, c-format +msgid "" +"\n" +"There is an import table in %s at 0x%lx\n" +msgstr "" +"\n" +"Постоји табела увоза у „%s“ на 0x%lx\n" + +#: peigen.c:1158 pepigen.c:1158 pex64igen.c:1158 +#, c-format +msgid "" +"\n" +"Function descriptor located at the start address: %04lx\n" +msgstr "" +"\n" +"Описник функције је откривен на почетној адреси: %04lx\n" + +#: peigen.c:1161 pepigen.c:1161 pex64igen.c:1161 +#, c-format +msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" +msgstr "\tтабела садржаја %08lx кодне основе (учитљива/актуелна) %08lx/%08lx\n" + +#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169 +#, c-format +msgid "" +"\n" +"No reldata section! Function descriptor not decoded.\n" +msgstr "" +"\n" +"Нема одељка података премештања! Описник функције није декодиран.\n" + +#: peigen.c:1174 pepigen.c:1174 pex64igen.c:1174 +#, c-format +msgid "" +"\n" +"The Import Tables (interpreted %s section contents)\n" +msgstr "" +"\n" +"Табеле увоза (протумачени садржај одељка „%s“)\n" + +#: peigen.c:1177 pepigen.c:1177 pex64igen.c:1177 +#, c-format +msgid "" +" vma: Hint Time Forward DLL First\n" +" Table Stamp Chain Name Thunk\n" +msgstr "" +" vma: Најава Време Напред ДЛЛ Први\n" +" Табела Отисак Ланац Назив Потпрограм\n" + +#: peigen.c:1225 pepigen.c:1225 pex64igen.c:1225 +#, c-format +msgid "" +"\n" +"\tDLL Name: %s\n" +msgstr "" +"\n" +"\tДЛЛ назив: %s\n" + +#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#, c-format +msgid "\tvma: Hint/Ord Member-Name Bound-To\n" +msgstr "\tvma: Најава/Редни Назив члана Свезан-за\n" + +#: peigen.c:1261 pepigen.c:1261 pex64igen.c:1261 +#, c-format +msgid "" +"\n" +"There is a first thunk, but the section containing it could not be found\n" +msgstr "" +"\n" +"Постоји први потпрограм, али не могу да нађем одељак који га садржи\n" + +#: peigen.c:1423 pepigen.c:1423 pex64igen.c:1423 +#, c-format +msgid "" +"\n" +"There is an export table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Постоји табела извоза, али не могу да нађем одељак који је садржи\n" + +#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432 +#, 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:1438 pepigen.c:1438 pex64igen.c:1438 +#, c-format +msgid "" +"\n" +"There is an export table in %s at 0x%lx\n" +msgstr "" +"\n" +"Постоји табела извоза у „%s“ на 0x%lx\n" + +#: peigen.c:1466 pepigen.c:1466 pex64igen.c:1466 +#, c-format +msgid "" +"\n" +"The Export Tables (interpreted %s section contents)\n" +"\n" +msgstr "" +"\n" +"Табеле извоза (протумачени садржај одељка „%s“)\n" +"\n" + +#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470 +#, c-format +msgid "Export Flags \t\t\t%lx\n" +msgstr "Заставице извоза \t\t%lx\n" + +#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473 +#, c-format +msgid "Time/Date stamp \t\t%lx\n" +msgstr "Отисак времена/датума \t\t%lx\n" + +#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 +#, c-format +msgid "Major/Minor \t\t\t%d/%d\n" +msgstr "Већи/Мањи \t\t\t%d/%d\n" + +#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479 +#, c-format +msgid "Name \t\t\t\t" +msgstr "Назив \t\t\t\t" + +#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485 +#, c-format +msgid "Ordinal Base \t\t\t%ld\n" +msgstr "сОснова редног броја\t\t%ld\n" + +#: peigen.c:1488 pepigen.c:1488 pex64igen.c:1488 +#, c-format +msgid "Number in:\n" +msgstr "Број улаза:\n" + +#: peigen.c:1491 pepigen.c:1491 pex64igen.c:1491 +#, c-format +msgid "\tExport Address Table \t\t%08lx\n" +msgstr "\tТабела адреса извоза \t\t%08lx\n" + +#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495 +#, c-format +msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" +msgstr "\tТабела [Назив показивача/редног броја]\t%08lx\n" + +#: peigen.c:1498 pepigen.c:1498 pex64igen.c:1498 +#, c-format +msgid "Table Addresses\n" +msgstr "Табела адреса\n" + +#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501 +#, c-format +msgid "\tExport Address Table \t\t" +msgstr "\tТабела адреса извоза \t\t" + +#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506 +#, c-format +msgid "\tName Pointer Table \t\t" +msgstr "\tТабела назива показивача \t\t" + +#: peigen.c:1511 pepigen.c:1511 pex64igen.c:1511 +#, c-format +msgid "\tOrdinal Table \t\t\t" +msgstr "\tТабела редних бројева \t\t\t" + +#: peigen.c:1525 pepigen.c:1525 pex64igen.c:1525 +#, c-format +msgid "" +"\n" +"Export Address Table -- Ordinal Base %ld\n" +msgstr "" +"\n" +"Табела адресе извоза —— Основа редних бројева %ld\n" + +#: peigen.c:1544 pepigen.c:1544 pex64igen.c:1544 +msgid "Forwarder RVA" +msgstr "RVA преослеђивача" + +#: peigen.c:1555 pepigen.c:1555 pex64igen.c:1555 +msgid "Export RVA" +msgstr "RVA извоза" + +#: peigen.c:1562 pepigen.c:1562 pex64igen.c:1562 +#, c-format +msgid "" +"\n" +"[Ordinal/Name Pointer] Table\n" +msgstr "" +"\n" +"Табела [Редни/Назив показивача]\n" + +#: peigen.c:1622 peigen.c:1805 pepigen.c:1622 pepigen.c:1805 pex64igen.c:1622 +#: pex64igen.c:1805 +#, c-format +msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" +msgstr "Упозорење, величина одељка „.pdata“ (%ld) није производ од %d\n" + +#: peigen.c:1629 pepigen.c:1629 pex64igen.c:1629 +#, c-format +msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" +msgstr " vma:\t\t\tАдреса почетка\t Адреса краја\t\tИзложени подаци\n" + +#: peigen.c:1631 pepigen.c:1631 pex64igen.c:1631 +#, 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:1705 pepigen.c:1705 pex64igen.c:1705 +#, c-format +msgid " Register save millicode" +msgstr " Регистар чува миликод" + +#: peigen.c:1708 pepigen.c:1708 pex64igen.c:1708 +#, c-format +msgid " Register restore millicode" +msgstr " Регистар враћа миликод" + +#: peigen.c:1711 pepigen.c:1711 pex64igen.c:1711 +#, c-format +msgid " Glue code sequence" +msgstr " Низ кода лепка" + +#: peigen.c:1811 pepigen.c:1811 pex64igen.c:1811 +#, 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Почетак Пролог Функција Заставице Изузетак ЕХ\n" +" \t\tАдреса Дужина Дужина 32b извр Руковлац Подаци\n" + +#: peigen.c:1937 pepigen.c:1937 pex64igen.c:1937 +#, c-format +msgid "" +"\n" +"\n" +"PE File Base Relocations (interpreted .reloc section contents)\n" +msgstr "" +"\n" +"\n" +"Премештање основе ПЕ датотеке (протумачени садржај „.reloc“ одељка)\n" + +#: peigen.c:1966 pepigen.c:1966 pex64igen.c:1966 +#, 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:1979 pepigen.c:1979 pex64igen.c:1979 +#, c-format +msgid "\treloc %4d offset %4x [%4lx] %s" +msgstr "\tпремештање %4d померај %4x [%4lx] %s" + +#: peigen.c:2023 pepigen.c:2023 pex64igen.c:2023 +#, c-format +msgid "%*.s Entry: " +msgstr "%*.s унос: " + +#: peigen.c:2043 pepigen.c:2043 pex64igen.c:2043 +#, c-format +msgid "name: [val: %08lx len %d]: " +msgstr "назив: [вредност: %08lx дужина %d]: " + +#: peigen.c:2054 pepigen.c:2054 pex64igen.c:2054 +#, c-format +msgid "" +msgstr "<оштећена дужина ниске: %#x>" + +#: peigen.c:2057 pepigen.c:2057 pex64igen.c:2057 +#, c-format +msgid "" +msgstr "<оштећен померај ниске: %#lx>" + +#: peigen.c:2060 pepigen.c:2060 pex64igen.c:2060 +#, c-format +msgid "ID: %#08lx" +msgstr "ИД: %#08lx" + +#: peigen.c:2063 pepigen.c:2063 pex64igen.c:2063 +#, c-format +msgid ", Value: %#08lx\n" +msgstr ", Вредност: %#08lx\n" + +#: peigen.c:2074 pepigen.c:2074 pex64igen.c:2074 +#, c-format +msgid "%*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" +msgstr "%*.s Лист: Адреса: %#08lx, Величина: %#08lx, Кодна страница: %d\n" + +#: peigen.c:2116 pepigen.c:2116 pex64igen.c:2116 +#, c-format +msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" +msgstr " Табела: Знак: %d, Време: %08lx, Изд: %d/%d, Број назива: %d, ИД-ови: %d\n" + +#: peigen.c:2204 pepigen.c:2204 pex64igen.c:2204 +#, c-format +msgid "Corrupt .rsrc section detected!\n" +msgstr "Откривен је оштећени „.rsrc“ одељак!\n" + +#: peigen.c:2220 pepigen.c:2220 pex64igen.c:2220 +#, c-format +msgid "" +"\n" +"WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n" +msgstr "" +"\n" +"УПОЗОРЕЊЕ: Вишак података у „.rsrc“ одељку – Виндоуз ће их занемарити:\n" + +#. The MS dumpbin program reportedly ands with 0xff0f before +#. printing the characteristics field. Not sure why. No reason to +#. emulate it here. +#: peigen.c:2243 pepigen.c:2243 pex64igen.c:2243 +#, c-format +msgid "" +"\n" +"Characteristics 0x%x\n" +msgstr "" +"\n" +"Особености 0x%x\n" + +#: peigen.c:3194 pepigen.c:3194 pex64igen.c:3194 +#, c-format +msgid ".rsrc merge failure: duplicate string resource: %d" +msgstr "Није успело „.rsrc“ стапање: извориште удвостручене ниске: %d" + +#: peigen.c:3329 pepigen.c:3329 pex64igen.c:3329 +msgid ".rsrc merge failure: multiple non-default manifests" +msgstr "Није успело „.rsrc“ стапање: неколико не-подразумеваних испољавања" + +#: peigen.c:3347 pepigen.c:3347 pex64igen.c:3347 +msgid ".rsrc merge failure: a directory matches a leaf" +msgstr "Није успело „.rsrc“ стапање: директоријум одговара листу" + +#: peigen.c:3389 pepigen.c:3389 pex64igen.c:3389 +msgid ".rsrc merge failure: duplicate leaf" +msgstr "Није успело „.rsrc“ стапање: удвостручени лист" + +#: peigen.c:3391 pepigen.c:3391 pex64igen.c:3391 +#, c-format +msgid ".rsrc merge failure: duplicate leaf: %s" +msgstr "Није успело „.rsrc“ стапање: удвостручени лист: %s" + +#: peigen.c:3457 pepigen.c:3457 pex64igen.c:3457 +msgid ".rsrc merge failure: dirs with differing characteristics\n" +msgstr "Није успело „.rsrc“ стапање: директоријуми са различитим особеностима\n" + +#: peigen.c:3464 pepigen.c:3464 pex64igen.c:3464 +msgid ".rsrc merge failure: differing directory versions\n" +msgstr "Није успело „.rsrc“ стапање: издања директоријума се разликују\n" + +#. Corrupted .rsrc section - cannot merge. +#: peigen.c:3537 pepigen.c:3537 pex64igen.c:3537 +#, c-format +msgid "%s: .rsrc merge failure: corrupt .rsrc section" +msgstr "%s: Није успело „.rsrc“ стапање: оштећени „.rsrc“ одељак" + +#: peigen.c:3673 pepigen.c:3673 pex64igen.c:3673 +msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%B: не могу да попуним речник података[1] зато што недостаје „.idata$2“" + +#: peigen.c:3693 pepigen.c:3693 pex64igen.c:3693 +msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%B: не могу да попуним речник података[1] зато што недостаје „.idata$4“" + +#: peigen.c:3714 pepigen.c:3714 pex64igen.c:3714 +msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%B: не могу да попуним речник података[12] зато што недостаје „.idata$5“" + +#: peigen.c:3734 pepigen.c:3734 pex64igen.c:3734 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%B: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE (12)] зато што недостаје „.idata$6“" + +#: peigen.c:3776 pepigen.c:3776 pex64igen.c:3776 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" +msgstr "%B: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE(12)] зато што недостаје „.idata$6“" + +#: peigen.c:3801 pepigen.c:3801 pex64igen.c:3801 +msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%B: не могу да попуним речник података[9] зато што недостаје „__tls_used“" + +#~ msgid "" +#~ "%B(%s): warning: interworking not enabled.\n" +#~ " first occurrence: %B: thumb call to arm" +#~ msgstr "" +#~ "%B(%s): attention: l'inter-réseautage n'est pas activé.\n" +#~ " première occurrence: %B: appel de repère vers arm" + +#~ msgid "DIV usage mismatch between %B and %B" +#~ msgstr "incohérence d'utilisation de DIV entre %B et %B" + +#~ msgid "%B: bad relocation section name `%s'" +#~ msgstr "%B: nom de section de réadressage erroné « %s »" + +#~ msgid "%P: dynamic variable `%s' is zero size\n" +#~ msgstr "%P: la variable dynamique « %s » a une taille nulle\n" + +#~ msgid " [64-bit doubles]" +#~ msgstr " [doubles de 64 bits]" + +#~ msgid " [dsp]" +#~ msgstr " [dsp]" + +#~ msgid "%P: %H: automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc\n" +#~ msgstr "%P: %H: TOC multiples et automatiques non supportées utilisant votre fichier crt; recompilez avec -mminimal-toc ou mettez à jour gcc\n" + +#~ msgid "%P: %H: sibling call optimization to `%s' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `%s' extern\n" +#~ msgstr "%P: %H: l'optimisation sœurs des appels vers « %s » n'autorise pas de TOC multiples et automatiques; recompilez avec -mminimal-toc ou -fno-optimize-sibling-calls, ou rendez « %s » externe\n" + +#~ msgid "note: '%s' is defined in DSO %B so try adding it to the linker command line" +#~ msgstr "note: «%s» est défini dans le DSO %B donc essayez de l'ajouter à la ligne de commande du lieur" + +#~ msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float" +#~ msgstr "Attention: %B utilise -msingle-float, %B utilise -mdouble-float" + +#~ msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64" +#~ msgstr "Attention: %B utilise -msingle-float, %B utilise -mips32r2 -mfp64" + +#~ msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64" +#~ msgstr "Attention: %B utilise -mdouble-float, %B utilise -mips32r2 -mfp64" + +#~ msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" is unsupported 'indirect' reference: setting to undefined" +#~ msgstr "bfd_mach_o_read_symtab_symbol: symbole « %s » a la référence non supportée « indirect »: laissé non défini" + +#~ msgid "bfd_mach_o_read_dysymtab_symbol: unable to read %lu bytes at %lu" +#~ msgstr "bfd_mach_o_read_dysymtab_symbol: impossible de lire %lu octets à %lu" + +#~ msgid "Mach-O header:\n" +#~ msgstr "En-tête Mach-O:\n" + +#~ msgid " magic : %08lx\n" +#~ msgstr " magique : %08lx\n" + +#~ msgid " cputype : %08lx (%s)\n" +#~ msgstr " typecpu : %08lx (%s)\n" + +#~ msgid " filetype : %08lx (%s)\n" +#~ msgstr " typefichier: %08lx (%s)\n" + +#~ msgid " ncmds : %08lx (%lu)\n" +#~ msgstr " ncmds : %08lx (%lu)\n" + +#~ msgid " sizeofcmds: %08lx\n" +#~ msgstr " taillecmds: %08lx\n" + +#~ msgid " flags : %08lx (" +#~ msgstr " fanions : %08lx (" + +#~ msgid " reserved : %08x\n" +#~ msgstr " réservé : %08x\n" + +#~ msgid "Segments and Sections:\n" +#~ msgstr "Segments et Sections:\n" + +#~ msgid " #: Segment name Section name Address\n" +#~ msgstr " #: Nom segment Nom section Adresse\n" + +#~ msgid "Symbol %s replaced by %s\n" +#~ msgstr "Symbole %s remplacé par %s\n" + +#~ msgid "%B(%A+0x%lx): cannot reach %s" +#~ msgstr "%B(%A+0x%lx): ne peut atteindre %s" + +#~ msgid "%B: warning: ignoring duplicate section `%A'\n" +#~ msgstr "%B: attention: ignore la section dupliquée «%A»\n" + +#~ msgid "%B: warning: duplicate section `%A' has different size\n" +#~ msgstr "%B: attention: section dupliquée «%A» avec des tailles différentes\n" + +#~ msgid "relocation references a different segment" +#~ msgstr "la relocalisation fait référence à un segment différent" + +#~ msgid "%B: relocation type %d not implemented" +#~ msgstr "%B: relocalisation de type %d pas implémentée" + +#~ msgid "warning: %B and %B differ in position-dependence of data addressing" +#~ msgstr "attention: %B et %B divergent sur la dépendance de la position de l'adressage des données" + +#~ msgid "warning: %B and %B differ in position-dependence of code addressing" +#~ msgstr "attention: %B et %B divergent sur la dépendance de la position de l'adressage du code" + +#~ msgid "Can't Make it a Short Jump" +#~ msgstr "Impossible d'en faire un Saut Court" + +#~ msgid "Exceeds Long Jump Range" +#~ msgstr "Portée dépassée pour le Saut Long" + +#~ msgid "Absolute address Exceeds 16 bit Range" +#~ msgstr "L'adresse absolue déborde sur 16 bits" + +#~ msgid "Absolute address Exceeds 8 bit Range" +#~ msgstr "L'adresse absolue déborde sur 8 bits" + +#~ msgid "Unrecognized Reloc Type" +#~ msgstr "Type de relocalisation non reconnu" + +#~ msgid "corrupt or empty %s section in %B" +#~ msgstr "section %s vide ou corrompue dans %B" + +#~ msgid "%s: invalid DSO for symbol `%s' definition" +#~ msgstr "%s: DSO incorrect pour la définition du symbole «%s»" + +#~ msgid "%B: %A+0x%lx: jump to stub routine which is not jal" +#~ msgstr "%B: %A+0x%lx: saut vers la routine dans la partie de l'ébauche (stub) qui n'est pas jal" + +#~ msgid "bfd_make_section (%s) failed" +#~ msgstr "Échec de bfd_make_section (%s)" + +#~ msgid "bfd_set_section_flags (%s, %x) failed" +#~ msgstr "bfd_set_section_flags (%s, %x) a échoué" + +#~ msgid "Size mismatch section %s=%lx, %s=%lx" +#~ msgstr "Taille de section ne concorde pas %s=%lx, %s=%lx" + +#~ msgid "failed to enter %s" +#~ msgstr "échec d'insertion de %s" + +#~ msgid "No Mem !" +#~ msgstr "Mémoire épuisée!" + +#~ msgid "reserved STO cmd %d" +#~ msgstr "commande STO %d réservée" + +#~ msgid "reserved OPR cmd %d" +#~ msgstr "commande OPR %d réservée" + +#~ msgid "reserved CTL cmd %d" +#~ msgstr "commande CTL %d réservée" + +#~ msgid "reserved STC cmd %d" +#~ msgstr "commande STC %d réservée" + +#~ msgid "stack-from-image not implemented" +#~ msgstr "pile depuis l'image non implémentée" + +#~ msgid "stack-entry-mask not fully implemented" +#~ msgstr "masque de pile d'entrée pas complètement implémenté" + +#~ msgid "PASSMECH not fully implemented" +#~ msgstr "PASSMECH pas complètement implémenté" + +#~ msgid "stack-local-symbol not fully implemented" +#~ msgstr "symbole local de pile pas complètement implémenté" + +#~ msgid "stack-literal not fully implemented" +#~ msgstr "litéral de pile pas complètement implémenté" + +#~ msgid "stack-local-symbol-entry-point-mask not fully implemented" +#~ msgstr "masque du symbole local de point d'entrée de pile pas complètement implémenté" + +#~ msgid "%s: not fully implemented" +#~ msgstr "%s: pas complètement implémenté" + +#~ msgid "obj code %d not found" +#~ msgstr "code objet %d non repéré" + +#~ msgid "Reloc size error in section %s" +#~ msgstr "Erreur de taille de relocalisation dans la section %s" diff --git a/bfd/po/sv.gmo b/bfd/po/sv.gmo index e746ec02e7563ca81ddea6cb6a048da279bf1ded..d19a0e767233f78d33e5a55d65b867d3503fff31 100644 GIT binary patch literal 155196 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 M>wI{eVX%z+Kh>owApigX literal 67266 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, 2001, 2002, 2003. -# +# Arve Eriksson <031299870@telia.com >, 2011. +# Josef Andersson , 2016. msgid "" msgstr "" -"Project-Id-Version: bfd 2.14rel030712\n" -"POT-Creation-Date: 2003-07-11 13:53+0930\n" -"PO-Revision-Date: 2003-08-14 22:40+0200\n" -"Last-Translator: Christian Rose \n" -"Language-Team: Swedish \n" +"Project-Id-Version: bfd-2.24.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2014-02-10 09:42+1030\n" +"PO-Revision-Date: 2016-05-14 04:05+0200\n" +"Last-Translator: Josef Andersson \n" +"Language-Team: Swedish \n" +"Language: sv\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" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" +"X-Launchpad-Export-Date: 2016-05-06 19:08+0000\n" -#: aout-adobe.c:204 -#, c-format -msgid "%s: Unknown section type in a.out.adobe file: %x\n" -msgstr "%s: Okänd sektionstyp i a.out.adobe-fil: %x\n" +#: aout-adobe.c:127 +msgid "%B: Unknown section type in a.out.adobe file: %x\n" +msgstr "%B: Okänd sektionstyp i filen a.out.adobe: %x\n" -#: aout-cris.c:207 +#: aout-cris.c:200 #, c-format msgid "%s: Invalid relocation type exported: %d" msgstr "%s: Ogiltig omlokaliseringstyp exporterad: %d" -#: aout-cris.c:251 -#, c-format -msgid "%s: Invalid relocation type imported: %d" -msgstr "%s: Ogiltig omlokaliseringstyp importerad: %d" +#: aout-cris.c:243 +msgid "%B: Invalid relocation type imported: %d" +msgstr "%B: Ogiltig omlokaliseringstyp importerad: %d" -#: aout-cris.c:262 -#, c-format -msgid "%s: Bad relocation record imported: %d" -msgstr "%s: Felaktig omlokaliseringstyp importerad: %d" +#: aout-cris.c:254 +msgid "%B: Bad relocation record imported: %d" +msgstr "%B: DÃ¥lig omlokaliseringspost importerad: %d" -#: aoutx.h:1295 aoutx.h:1716 +#: aoutx.h:1273 aoutx.h:1611 #, c-format msgid "%s: can not represent section `%s' in a.out object file format" -msgstr "%s: kan inte representera sektionen \"%s\" i a.out-objektfilformat" +msgstr "%s: kan inte representera sektionen ”%s” i a.out-objektfilformat" -#: aoutx.h:1682 +#: aoutx.h:1577 #, c-format msgid "%s: can not represent section for symbol `%s' in a.out object file format" -msgstr "%s: kan inte representera sektion för symbolen \"%s\" i a.out-objektfilformat" +msgstr "%s: kan inte representera sektionen för symbolen ”%s” i a.out-objektfilformat" -#: aoutx.h:1684 +#: aoutx.h:1579 vms-alpha.c:7564 msgid "*unknown*" -msgstr "*okänd*" +msgstr "*okänd*" + +#: aoutx.h:4018 aoutx.h:4344 +msgid "%P: %B: unexpected relocation type\n" +msgstr "%P: %B: oväntad omlokaliseringstyp\n" -#: aoutx.h:3776 +#: aoutx.h:5375 #, c-format msgid "%s: relocatable link from %s to %s not supported" -msgstr "%s: omlokaliseringsbar länk från %s till %s stöds inte" +msgstr "%s: omlokaliseringsbar länk frÃ¥n %s till %s stöds inte" -#: archive.c:1751 +#: archive.c:2249 msgid "Warning: writing archive was slow: rewriting timestamp\n" -msgstr "Varning: arkivskrivning var långsam: skriver om tidsstämpel\n" +msgstr "Varning: arkivskrivning var lÃ¥ngsam: skriver om tidsstämpel\n" -#: archive.c:2014 +#: archive.c:2549 msgid "Reading archive file mod timestamp" -msgstr "Läser arkivfilens modifieringstidsstämpel" +msgstr "Läser arkivfilens modifieringstidsstämpel" -#: archive.c:2040 +#: archive.c:2573 msgid "Writing updated armap timestamp" -msgstr "Skriver uppdaterad armap-tidsstämpel" +msgstr "Skriver uppdaterad armap-tidsstämpel" -#: bfd.c:280 +#: bfd.c:411 msgid "No error" msgstr "Inget fel" -#: bfd.c:281 +#: bfd.c:412 msgid "System call error" msgstr "Systemanropsfel" -#: bfd.c:282 +#: bfd.c:413 msgid "Invalid bfd target" -msgstr "Ogiltigt bfd-mål" +msgstr "Ogiltigt bfd-mÃ¥l" -#: bfd.c:283 +#: bfd.c:414 msgid "File in wrong format" -msgstr "Filen är i fel format" +msgstr "Filen är i fel format" -#: bfd.c:284 +#: bfd.c:415 msgid "Archive object file in wrong format" -msgstr "Arkivobjektfil är i fel format" +msgstr "Arkivobjektfilen är i fel format" -#: bfd.c:285 +#: bfd.c:416 msgid "Invalid operation" -msgstr "Ogiltig åtgärd" +msgstr "Ogiltig Ã¥tgärd" -#: bfd.c:286 +#: bfd.c:417 msgid "Memory exhausted" -msgstr "Minnet är slut" +msgstr "Minnet är slut" -#: bfd.c:287 +#: bfd.c:418 msgid "No symbols" msgstr "Inga symboler" -#: bfd.c:288 +#: bfd.c:419 msgid "Archive has no index; run ranlib to add one" -msgstr "Arkivet har inget index; kör ranlib för att lägga till ett" +msgstr "Arkivet har inget index; kör ranlib för att lägga till ett" -#: bfd.c:289 +#: bfd.c:420 msgid "No more archived files" msgstr "Inga fler arkiverade filer" -#: bfd.c:290 +#: bfd.c:421 msgid "Malformed archive" msgstr "Trasigt arkiv" -#: bfd.c:291 +#: bfd.c:422 +msgid "DSO missing from command line" +msgstr "DSO saknas frÃ¥n kommandoraden" + +#: bfd.c:423 msgid "File format not recognized" -msgstr "Filformatet känns inte igen" +msgstr "Filformatet känns inte igen" -#: bfd.c:292 +#: bfd.c:424 msgid "File format is ambiguous" -msgstr "Filformatet är tvetydigt" +msgstr "Filformatet är tvetydigt" -#: bfd.c:293 +#: bfd.c:425 msgid "Section has no contents" -msgstr "Sektionen har inget innehåll" +msgstr "sektionen har inget innehÃ¥ll" -#: bfd.c:294 +#: bfd.c:426 msgid "Nonrepresentable section on output" msgstr "Ickerepresenterbar sektion i utdata" -#: bfd.c:295 +#: bfd.c:427 msgid "Symbol needs debug section which does not exist" -msgstr "Symbolen kräver felsökningssektion som inte finns" +msgstr "Symbolen kräver felsökningssektion som inte finns" -#: bfd.c:296 +#: bfd.c:428 msgid "Bad value" -msgstr "Felaktigt värde" +msgstr "Felaktigt värde" -#: bfd.c:297 +#: bfd.c:429 msgid "File truncated" msgstr "Filen trunkerad" -#: bfd.c:298 +#: bfd.c:430 msgid "File too big" -msgstr "Filen är för stor" +msgstr "Filen är för stor" + +#: bfd.c:431 +#, c-format +msgid "Error reading %s: %s" +msgstr "Fel vid läsning av %s: %s" -#: bfd.c:299 +#: bfd.c:432 msgid "#" msgstr "#" -#: bfd.c:687 +#: bfd.c:1046 #, c-format msgid "BFD %s assertion fail %s:%d" -msgstr "BFD %s-försäkran misslyckades %s:%d" +msgstr "BFD %s-försäkran misslyckades %s:%d" -#: bfd.c:703 +#: bfd.c:1058 #, c-format msgid "BFD %s internal error, aborting at %s line %d in %s\n" msgstr "Internt BFD %s-fel, avbryter vid %s rad %d i %s\n" -#: bfd.c:707 +#: bfd.c:1062 #, c-format msgid "BFD %s internal error, aborting at %s line %d\n" msgstr "Internt BFD %s-fel, avbryter vid %s rad %d\n" -#: bfd.c:709 +#: bfd.c:1064 msgid "Please report this bug.\n" -msgstr "Rapportera gärna detta fel.\n" +msgstr "Rapportera gärna detta fel.\n" -#: bfdwin.c:202 +#: bfdwin.c:206 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "mappar inte: data=%lx mappat=%d\n" -#: bfdwin.c:205 +#: bfdwin.c:209 +#, c-format msgid "not mapping: env var not set\n" -msgstr "mappar inte: miljövariabel är inte satt\n" +msgstr "mappar inte: miljövariabel är inte satt\n" -#: binary.c:306 +#: binary.c:271 #, c-format msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." -msgstr "Varning: Skrivning av sektionen \"%s\" till enormt (dvs negativt) avlägsen byte 0x%lx." +msgstr "Varning: Skrivning av sektionen ”%s” till enormt (dvs negativt) avlägsen byte 0x%lx." -# src/menus.c:341 -#: coff-a29k.c:120 -msgid "Missing IHCONST" -msgstr "IHCONST saknas" +#: bout.c:1146 elf-m10300.c:2665 elf32-avr.c:1706 elf32-frv.c:5641 +#: elf64-ia64-vms.c:354 elfxx-sparc.c:2869 reloc.c:7324 reloc16.c:160 +#: elf32-ia64.c:351 elf64-ia64.c:351 +msgid "%P%F: --relax and -r may not be used together\n" +msgstr "%P%F: --relax och -r kan inte användas tillsammans\n" -# src/menus.c:341 -#: coff-a29k.c:181 -msgid "Missing IHIHALF" -msgstr "IHIHALF saknas" +#: cache.c:253 +msgid "reopening %B: %s\n" +msgstr "öppnar %B igen: %s\n" -#: coff-a29k.c:213 coff-or32.c:236 -msgid "Unrecognized reloc" -msgstr "Okänd omlokalisering" - -#: coff-a29k.c:409 -msgid "missing IHCONST reloc" -msgstr "IHCONST-omlokalisering saknas" +#: coff-alpha.c:452 +msgid "" +"%B: Cannot handle compressed Alpha binaries.\n" +" Use compiler flags, or objZ, to generate uncompressed binaries." +msgstr "" +"%B: Kan inte hantera komprimerade Alpha-binärer.\n" +" Använd kompileringsflaggor eller objZ för att generera okomprimerade binärer." -#: coff-a29k.c:499 -msgid "missing IHIHALF reloc" -msgstr "IHIHALF-omlokalisering saknas" +#: coff-alpha.c:603 +msgid "%B: unknown/unsupported relocation type %d" +msgstr "%B: omlokaliseringstyp okänd/stöd saknas för typ %d" -#: coff-alpha.c:884 coff-alpha.c:921 coff-alpha.c:1992 coff-mips.c:1397 +#: coff-alpha.c:852 coff-alpha.c:889 coff-alpha.c:1973 coff-mips.c:946 msgid "GP relative relocation used when GP not defined" -msgstr "GP-relativ omlokalisering användes då GP inte är definierad" +msgstr "GP-relativ omlokalisering användes dÃ¥ GP inte är definierad" -#: coff-alpha.c:1488 +#: coff-alpha.c:1450 msgid "using multiple gp values" -msgstr "använder flera gp-värden" +msgstr "använder flera gp-värden" -#: coff-arm.c:1066 elf32-arm.h:294 -#, c-format -msgid "%s: unable to find THUMB glue '%s' for `%s'" -msgstr "%s: kunde inte hitta THUMB-klistret \"%s\" till \"%s\"" +#: coff-alpha.c:1509 +msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" +msgstr "%B: omlokalisering stöds ej: ALPHA_R_GPRELHIGH" -#: coff-arm.c:1096 elf32-arm.h:329 -#, c-format -msgid "%s: unable to find ARM glue '%s' for `%s'" -msgstr "%s: kunde inte hitta ARM-klistret \"%s\" till \"%s\"" +#: coff-alpha.c:1516 +msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" +msgstr "%B: omlokalisering stöds ej: ALPHA_R_GPRELLOW" -#: coff-arm.c:1394 coff-arm.c:1489 elf32-arm.h:892 elf32-arm.h:999 -#, c-format -msgid "%s(%s): warning: interworking not enabled." -msgstr "%s(%s): varning: samverkande är inte aktiverat." +#: coff-alpha.c:1523 elf32-m32r.c:2443 elf64-alpha.c:4083 elf64-alpha.c:4233 +#: elf64-ia64-vms.c:3429 elf32-ia64.c:3836 elf64-ia64.c:3836 +msgid "%B: unknown relocation type %d" +msgstr "%B: okänd omlokaliseringstyp %d" -#: coff-arm.c:1398 elf32-arm.h:1002 +#: coff-arm.c:1034 #, c-format -msgid " first occurrence: %s: arm call to thumb" -msgstr " första förekomst: %s: arm-anrop till thumb" +msgid "%B: unable to find THUMB glue '%s' for `%s'" +msgstr "%B: kunde inte hitta THUMB-lim ”%s” för ”%s”" -#: coff-arm.c:1493 elf32-arm.h:895 +#: coff-arm.c:1063 #, c-format -msgid " first occurrence: %s: thumb call to arm" -msgstr " första förekomst: %s: thumb-anrop till arm" - -#: coff-arm.c:1496 -msgid " consider relinking with --support-old-code enabled" -msgstr " överväg omlänkning med --support-old-code aktiverat" +msgid "%B: unable to find ARM glue '%s' for `%s'" +msgstr "%B: kunde inte hitta ARM-lim ”%s” för ”%s”" -#: coff-arm.c:1788 coff-tic80.c:687 cofflink.c:3038 +#: coff-arm.c:1365 elf32-arm.c:7141 #, c-format -msgid "%s: bad reloc address 0x%lx in section `%s'" -msgstr "%s: felaktig omlokaliseringsadress 0x%lx i sektionen \"%s\"" +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: arm call to thumb" +msgstr "" +"%B(%s): varning: växelverkning inte aktiverat.\n" +" första användning: %B: arm-anrop till thumb" -#: coff-arm.c:2132 +#: coff-arm.c:1455 #, c-format -msgid "%s: illegal symbol index in reloc: %d" -msgstr "%s: otillåtet symbolindex i omlokalisering: %d" +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): varning: växelverkning inte aktiverat.\n" +" första användning: %B: thumb-anrop till arm\n" +" prova att länka om med --support-old-code aktiverad" -#: coff-arm.c:2265 +#: coff-arm.c:1750 coff-tic80.c:673 cofflink.c:3168 +msgid "%B: bad reloc address 0x%lx in section `%A'" +msgstr "%B: felaktig omlokaliseringsadress 0x%lx i sektion ”%A”" + +#: coff-arm.c:2075 +msgid "%B: illegal symbol index in reloc: %d" +msgstr "%B: otillÃ¥tet symbolindex i omlokalisering: %d" + +#: coff-arm.c:2206 #, c-format -msgid "ERROR: %s is compiled for APCS-%d, whereas %s is compiled for APCS-%d" -msgstr "FEL: %s kompilerad för APCS-%d, medan %s är kompilerad för APCS-%d" +msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgstr "fel: %B kompilerades för APCS-%d, medan %B kompilerades för APCS-%d" -#: coff-arm.c:2280 elf32-arm.h:2328 +#: coff-arm.c:2222 elf32-arm.c:16123 #, c-format -msgid "ERROR: %s passes floats in float registers, whereas %s passes them in integer registers" -msgstr "FEL: %s skickar flyttal i flyttalsregister, medan %s skickar dem i heltalsregister" +msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers" +msgstr "fel: %B skickar flyttal i flyttalsregister, medan %B skickar dem i heltalsregister" -#: coff-arm.c:2283 elf32-arm.h:2333 +#: coff-arm.c:2225 elf32-arm.c:16127 #, c-format -msgid "ERROR: %s passes floats in integer registers, whereas %s passes them in float registers" -msgstr "FEL: %s skickar flyttal i heltalsregister, medan %s skickar dem i flyttalsregister" +msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers" +msgstr "fel: %B skickar flyttal i heltalsregister, medan %B skickar dem i flyttalsregister" -#: coff-arm.c:2298 +#: coff-arm.c:2239 #, c-format -msgid "ERROR: %s is compiled as position independent code, whereas target %s is absolute position" -msgstr "FEL: %s är kompilerad som positionsoberoende kod, medan målet %s har absolut position" +msgid "error: %B is compiled as position independent code, whereas target %B is absolute position" +msgstr "fel: %B kompilerades som positionsoberoende kod, medan mÃ¥let %B är en absolut position" -#: coff-arm.c:2301 +#: coff-arm.c:2242 #, c-format -msgid "ERROR: %s is compiled as absolute position code, whereas target %s is position independent" -msgstr "FEL: %s är kompilerad som kod med absolut position, medan målet %s är positionsoberoende" +msgid "error: %B is compiled as absolute position code, whereas target %B is position independent" +msgstr "fel: %B kompilerades som absolut position-kod, medan mÃ¥let %B är positionsoberoende" -#: coff-arm.c:2330 elf32-arm.h:2405 +#: coff-arm.c:2270 elf32-arm.c:16192 #, c-format -msgid "Warning: %s supports interworking, whereas %s does not" -msgstr "Varning: %s stöder samverkande, medan %s däremot inte gör det" +msgid "Warning: %B supports interworking, whereas %B does not" +msgstr "Varning: %B stöder samverkan, medan %B inte gör det" -#: coff-arm.c:2333 elf32-arm.h:2412 +#: coff-arm.c:2273 elf32-arm.c:16198 #, c-format -msgid "Warning: %s does not support interworking, whereas %s does" -msgstr "Varning: %s stöder inte samverkande, medan %s däremot gör det" +msgid "Warning: %B does not support interworking, whereas %B does" +msgstr "Varning: %B stöder inte samverkan, medan %B gör det" -#: coff-arm.c:2360 +#: coff-arm.c:2297 #, c-format msgid "private flags = %x:" msgstr "privata flaggor = %x:" -#: coff-arm.c:2368 elf32-arm.h:2467 +#: coff-arm.c:2305 elf32-arm.c:12119 +#, c-format msgid " [floats passed in float registers]" msgstr " [flyttal skickade i flyttalsregister]" -#: coff-arm.c:2370 +#: coff-arm.c:2307 +#, c-format msgid " [floats passed in integer registers]" msgstr " [flyttal skickade i heltalsregister]" -#: coff-arm.c:2373 elf32-arm.h:2470 +#: coff-arm.c:2310 elf32-arm.c:12122 +#, c-format msgid " [position independent]" msgstr " [positionsoberoende]" -#: coff-arm.c:2375 +#: coff-arm.c:2312 +#, c-format msgid " [absolute position]" msgstr " [absolut position]" -#: coff-arm.c:2379 +#: coff-arm.c:2316 +#, c-format msgid " [interworking flag not initialised]" -msgstr " [samverkandeflagga är inte initierad]" +msgstr " [samverkandeflagga är inte initierad]" -#: coff-arm.c:2381 +#: coff-arm.c:2318 +#, c-format msgid " [interworking supported]" -msgstr " [samverkan stöds]" +msgstr " [samverkan stöds]" -#: coff-arm.c:2383 +#: coff-arm.c:2320 +#, c-format msgid " [interworking not supported]" -msgstr " [samverkan stöds inte]" +msgstr " [samverkan stöds inte]" -#: coff-arm.c:2431 elf32-arm.h:2150 +#: coff-arm.c:2366 elf32-arm.c:11104 #, c-format -msgid "Warning: Not setting interworking flag of %s since it has already been specified as non-interworking" -msgstr "Varning: Ställer inte in samverkansflaggan för %s eftersom den redan har angivits som inte samverkande" +msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" +msgstr "Varning: Ställer inte in interoperationsflagga för %B eftersom den redan har angetts som ej samverkande" -#: coff-arm.c:2435 elf32-arm.h:2154 +#: coff-arm.c:2370 elf32-arm.c:11108 #, c-format -msgid "Warning: Clearing the interworking flag of %s due to outside request" -msgstr "Varning: Stänger av samverkansflaggan för %s på grund av begäran utifrån" +msgid "Warning: Clearing the interworking flag of %B due to outside request" +msgstr "Varning: Rensar samverkandeflaggan för %B pÃ¥ begäran utifrÃ¥n" #: coff-h8300.c:1096 #, c-format msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" -msgstr "kan inte hantera R_MEM_INDIRECT-omlokalisering vid användning av %s-utdata" +msgstr "kan inte hantera R_MEM_INDIRECT-omlokalisering vid användning av %s-utdata" + +#: coff-i860.c:147 +#, c-format +msgid "relocation `%s' not yet implemented" +msgstr "omplacering ”%s” ännu inte tillämpad" + +#: coff-i860.c:605 coff-tic54x.c:365 coffcode.h:5209 +msgid "%B: warning: illegal symbol index %ld in relocs" +msgstr "%B: varning: ogiltigt symbolindex %ld i relocs" -#: coff-i960.c:137 coff-i960.c:486 +#: coff-i960.c:124 coff-i960.c:480 msgid "uncertain calling convention for non-COFF symbol" -msgstr "osäker anropskonvention för icke-COFF-symbol" +msgstr "osäker anropskonvention för icke-COFF-symbol" -#: coff-m68k.c:482 coff-mips.c:2394 elf32-m68k.c:2193 elf32-mips.c:1783 +#: coff-m68k.c:484 elf32-bfin.c:5556 elf32-cr16.c:2853 elf32-m68k.c:4632 msgid "unsupported reloc type" -msgstr "omlokaliseringstypen stöds inte" +msgstr "omlokaliseringstypen stöds inte" -#: coff-mips.c:839 elf32-mips.c:1088 elf64-mips.c:1590 elfn32-mips.c:1554 +#: coff-mips.c:636 elf32-mips.c:1637 elf32-score.c:431 elf32-score7.c:330 +#: elf64-mips.c:2925 elfn32-mips.c:2737 msgid "GP relative relocation when _gp not defined" -msgstr "GP-relativ omlokalisering då _gp inte var definierat" +msgstr "GP-relativ omlokalisering dÃ¥ _gp inte var definierat" -#. No other sections should appear in -membedded-pic -#. code. -#: coff-mips.c:2431 -msgid "reloc against unsupported section" -msgstr "omlokalisering mot sektion som inte stöds" - -#: coff-mips.c:2439 -msgid "reloc not properly aligned" -msgstr "omlokalisering inte på jämn gräns" +#: coff-or32.c:216 +msgid "Unrecognized reloc" +msgstr "Okänd omlokalisering" -#: coff-rs6000.c:2790 +#: coff-rs6000.c:2802 #, c-format msgid "%s: unsupported relocation type 0x%02x" -msgstr "%s: omlokaliseringstypen 0x%02x stöds inte" +msgstr "%s: omlokaliseringstypen 0x%02x stöds inte" -#: coff-rs6000.c:2883 +#: coff-rs6000.c:2887 #, c-format msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" -msgstr "%s: TOC-omlokalisering vid 0x%x till symbolen \"%s\" utan någon TOC-post" +msgstr "%s: TOC-omlokalisering vid 0x%x till symbolen ”%s” utan nÃ¥gon TOC-post" -#: coff-rs6000.c:3616 coff64-rs6000.c:2109 +#: coff-rs6000.c:3638 coff64-rs6000.c:2117 +msgid "%B: symbol `%s' has unrecognized smclas %d" +msgstr "%B: symbolen ”%s” har okänd smclas %d" + +#: coff-sh.c:506 #, c-format -msgid "%s: symbol `%s' has unrecognized smclas %d" -msgstr "%s: symbolen \"%s\" har okänd smclas %d" +msgid "SH Error: unknown reloc type %d" +msgstr "SH-fel: okänd omlokaliseringstyp %d" -#: coff-tic4x.c:170 coff-tic54x.c:288 coff-tic80.c:450 +#: coff-tic4x.c:184 coff-tic54x.c:279 coff-tic80.c:440 #, c-format msgid "Unrecognized reloc type 0x%x" -msgstr "Okänd omlokaliseringstyp 0x%x" +msgstr "Okänd omlokaliseringstyp 0x%x" -#: coff-tic4x.c:218 coff-tic54x.c:373 coffcode.h:5045 +#: coff-tic4x.c:227 #, c-format msgid "%s: warning: illegal symbol index %ld in relocs" -msgstr "%s: varning: otillåtet symbolindex %ld i omlokaliseringarna" +msgstr "%s: varning: otillÃ¥tet symbolindex %ld i omlokaliseringarna" -#: coff-w65.c:364 +#: coff-w65.c:355 #, c-format msgid "ignoring reloc %s\n" msgstr "ignorerar omlokalisering %s\n" -#: coffcode.h:1108 -#, c-format -msgid "%s (%s): Section flag %s (0x%x) ignored" -msgstr "%s (%s): Sektionsflaggan %s (0x%x) ignorerades" +#: coffcode.h:1005 +msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" +msgstr "%B: varning: COMDAT-symbolen ”%s” matchar inte sektionsnamnet ”%s”" -#: coffcode.h:2214 +#. 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:1230 +msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "%B: Varning: Ignorerar sektionsflaggan IMAGE_SCN_MEM_NOT_PAGED i sektion %s" + +#: coffcode.h:1297 +msgid "%B (%s): Section flag %s (0x%x) ignored" +msgstr "%B (%s): sektionsflaggan %s (0x%x) ignoreras" + +#: coffcode.h:2439 #, c-format msgid "Unrecognized TI COFF target id '0x%x'" -msgstr "Okänt TI COFF-målid \"0x%x\"" +msgstr "Okänt TI COFF-mÃ¥lid ”0x%x”" -#: coffcode.h:4437 -#, c-format -msgid "%s: warning: illegal symbol index %ld in line numbers" -msgstr "%s: varning: otillåtet symbolindex %ld i radnummer" +#: coffcode.h:2753 +msgid "%B: reloc against a non-existant symbol index: %ld" +msgstr "%B: omlokalisering mot ett icke-existerande symbolindex: %ld" -#: coffcode.h:4451 -#, c-format -msgid "%s: warning: duplicate line number information for `%s'" -msgstr "%s: varning: dubbel radnummersinformation för \"%s\"" +#: coffcode.h:3311 +msgid "%B: too many sections (%d)" +msgstr "%B: för mÃ¥nga sektioner (%d)" -#: coffcode.h:4805 -#, c-format -msgid "%s: Unrecognized storage class %d for %s symbol `%s'" -msgstr "%s: Okänd lagringsklass %d för %s-symbolen \"%s\"" +#: coffcode.h:3729 +msgid "%B: section %s: string table overflow at offset %ld" +msgstr "%B: sektion %s: strängtabellen flödade över vid %ld" -#: coffcode.h:4938 -#, c-format -msgid "warning: %s: local symbol `%s' has no section" -msgstr "varning: %s: lokala symbolen \"%s\" har ingen sektion" +#: coffcode.h:4534 +msgid "%B: warning: line number table read failed" +msgstr "%B: varning: kunde inte läsa radnummertabellen" -#: coffcode.h:5083 -#, c-format -msgid "%s: illegal relocation type %d at address 0x%lx" -msgstr "%s: otillåten omlokaliseringstyp %d på adress 0x%lx" +#: coffcode.h:4564 +msgid "%B: warning: illegal symbol index %ld in line numbers" +msgstr "%B: varning: ogiltigt symbolindex %ld i radnummer" -#: coffgen.c:1666 -#, c-format -msgid "%s: bad string table size %lu" -msgstr "%s: felaktig strängtabellstorlek %lu" +#: coffcode.h:4578 +msgid "%B: warning: duplicate line number information for `%s'" +msgstr "%B: varning: dubbla kopior av linjenummer för ”%s”" -#: cofflink.c:538 elflink.h:1276 -#, c-format -msgid "Warning: type of symbol `%s' changed from %d to %d in %s" -msgstr "Varning: typen på symbolen \"%s\" ändrades från %d till %d i %s" +#: coffcode.h:4978 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +msgstr "%B: Okänd lagringsklass %d för %s symbol ”%s”" -#: cofflink.c:2328 -#, c-format -msgid "%s: relocs in section `%s', but it has no contents" -msgstr "%s: omlokaliseringar i sektionen \"%s\", men den har inget innehåll" +#: coffcode.h:5104 +msgid "warning: %B: local symbol `%s' has no section" +msgstr "varning: %B: den lokala symbolen ”%s” har ingen sektion" + +#: coffcode.h:5248 +msgid "%B: illegal relocation type %d at address 0x%lx" +msgstr "%B: ogiltig omlokaliseringstyp %d pÃ¥ adress 0x%lx" + +#: coffgen.c:179 elf.c:1030 +msgid "%B: unable to initialize compress status for section %s" +msgstr "%B: kunde inte initiera kompression av status för sektion %s" -#: cofflink.c:2671 coffswap.h:890 +#: coffgen.c:199 elf.c:1050 +msgid "%B: unable to initialize decompress status for section %s" +msgstr "%B: kunde inte initiera uppackning av status för sektion %s" + +#: coffgen.c:1685 +msgid "%B: bad string table size %lu" +msgstr "%B: felaktig strängtabellsstorlek %lu" + +#: coffgen.c:2608 elflink.c:12906 linker.c:3136 +msgid "%F%P: already_linked_table: %E\n" +msgstr "%F%P: already_linked_table: %E\n" + +#: cofflink.c:533 elf64-ia64-vms.c:5173 elflink.c:4356 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +msgstr "Varning: type av symbol ”%s” har ändrats frÃ¥n %d till %d i %B" + +#: cofflink.c:2416 +msgid "%B: relocs in section `%A', but it has no contents" +msgstr "%B: relocs i sektion ”%A”, men den har inget innehÃ¥ll" + +#: cofflink.c:2478 elflink.c:9711 +msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" +msgstr "%X”%s” används i sektionen ”%A” i %B: definieras i kastad sektion ”%A” i %B\n" + +#: cofflink.c:2777 coffswap.h:826 #, c-format msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" -msgstr "%s: %s: omlokalisering ger överspill: 0x%lx > 0xffff" +msgstr "%s: %s: omlokalisering ger överspill: 0x%lx > 0xffff" -#: cofflink.c:2680 coffswap.h:876 +#: cofflink.c:2786 coffswap.h:812 #, c-format msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%s: varning: %s: radnummer ger överspill: 0x%lx > 0xffff" +msgstr "%s: varning: %s: radnummer ger överspill: 0x%lx > 0xffff" -#: cpu-arm.c:196 cpu-arm.c:206 -#, c-format -msgid "ERROR: %s is compiled for the EP9312, whereas %s is compiled for XScale" -msgstr "FEL: %s kompilerad för EP9312, medan %s är kompilerad för XScale" +#: cpu-arm.c:190 cpu-arm.c:201 +msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgstr "fel: %B kompilerades för EP9312, medan %B kompilerades för XScale" -#: cpu-arm.c:344 +#: cpu-arm.c:334 #, c-format msgid "warning: unable to update contents of %s section in %s" -msgstr "varning: kan inte uppdatera innehållet i %s-sektion i %s" - -#: dwarf2.c:380 -msgid "Dwarf Error: Can't find .debug_str section." -msgstr "Dwarf-fel: Kan inte hitta sektionen .debug_str." +msgstr "varning: kan inte uppdatera innehÃ¥llet i %s-sektion i %s" -#: dwarf2.c:397 +#: dwarf2.c:514 #, c-format -msgid "Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)." -msgstr "Dwarf-fel: DW_FORM_strp-avståndet (%lu) större än eller lika med storleken på .debug_str (%lu)." +msgid "Dwarf Error: Can't find %s section." +msgstr "Dwarf-fel: Kan inte hitta sektion %s." -#: dwarf2.c:541 -msgid "Dwarf Error: Can't find .debug_abbrev section." -msgstr "Dwarf-fel: Kan inte hitta sektionen .debug_abbrev." - -#: dwarf2.c:556 +#: dwarf2.c:543 #, c-format -msgid "Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)." -msgstr "Dwarf-fel: Förkortningsavståndet (%lu) större än eller lika med storleken .debug_abbrev (%lu)." +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." +msgstr "Dwarf-fel: Offset (%lu) är större än eller i samma storlek som %s (%lu)." -#: dwarf2.c:756 +#: dwarf2.c:1071 #, c-format -msgid "Dwarf Error: Invalid or unhandled FORM value: %u." -msgstr "Dwarf-fel: Ogiltig eller ohanterat FORM-värde: %u." +msgid "Dwarf Error: Invalid or unhandled FORM value: %#x." +msgstr "Dwarf-fel: Ogiltigt eller ej hanterat FORM-värde: %#x." -#: dwarf2.c:933 +#: dwarf2.c:1332 msgid "Dwarf Error: mangled line number section (bad file number)." msgstr "Dwarf-fel: trasig radnummerssektion (felaktigt filnummer)." -#: dwarf2.c:1032 -msgid "Dwarf Error: Can't find .debug_line section." -msgstr "Dwarf-fel: Kan inte hitta sektionen .debug_line." - -#: dwarf2.c:1049 +#: dwarf2.c:1590 #, c-format -msgid "Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)." -msgstr "Dwarf-fel: Radavståndet (%lu) större än eller lika med storleken .debug_line (%lu)." +msgid "Dwarf Error: Unhandled .debug_line version %d." +msgstr "Dwarf-fel: Ickehanterad version %d av .debug_line." -#: dwarf2.c:1255 +#: dwarf2.c:1612 +msgid "Dwarf Error: Invalid maximum operations per instruction." +msgstr "Dwarf-fel: Ogiltigt maximala operationer per instruktion." + +#: dwarf2.c:1807 msgid "Dwarf Error: mangled line number section." msgstr "Dwarf-fel: trasig radnummerssektion." -#: dwarf2.c:1470 dwarf2.c:1620 +#: dwarf2.c:2160 +#, c-format +msgid "Dwarf Error: Unable to read alt ref %u." +msgstr "Dwarf-fel: Kunde inte läsa alt ref %u." + +#: dwarf2.c:2179 dwarf2.c:2299 dwarf2.c:2595 #, c-format msgid "Dwarf Error: Could not find abbrev number %u." -msgstr "Dwarf-fel: Kunde inte hitta förkortningsnumret %u." +msgstr "Dwarf-fel: Kunde inte hitta förkortningsnumret %u." -#: dwarf2.c:1581 +#: dwarf2.c:2551 #, c-format -msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 information." -msgstr "Dwarf-fel: hittade dwarf version \"%u\", denna läsare hanterar endast information från version 2." +msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2, 3 and 4 information." +msgstr "Dwarf-fel: hittade dwarf version ”%u”, läsaren hanterar bara versioner 2,3 och 4." -#: dwarf2.c:1588 +#: dwarf2.c:2560 #, c-format msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." -msgstr "Dwarf-fel: hittade adresstorleken \"%u\", denna läsare kan inte hantera storlekar större än \"%u\"." +msgstr "Dwarf-fel: hittade adresstorleken ”%u”, denna läsare kan inte hantera storlekar större än ”%u”." -#: dwarf2.c:1611 +#: dwarf2.c:2586 #, c-format msgid "Dwarf Error: Bad abbrev number: %u." -msgstr "Dwarf-fel: Felaktigt förkortningsnummer: %u." +msgstr "Dwarf-fel: Felaktigt förkortningsnummer: %u." -#: ecoff.c:1339 +#: ecoff.c:1233 #, c-format msgid "Unknown basic type %d" -msgstr "Okänd grundtyp %d" +msgstr "Okänd grundtyp %d" -#: ecoff.c:1599 +#: ecoff.c:1490 #, c-format msgid "" "\n" @@ -525,16 +600,16 @@ msgstr "" "\n" " Symbol slut+1: %ld" -#: ecoff.c:1606 ecoff.c:1609 +#: ecoff.c:1497 ecoff.c:1500 #, c-format msgid "" "\n" " First symbol: %ld" msgstr "" "\n" -" Första symbolen: %ld" +" Första symbolen: %ld" -#: ecoff.c:1621 +#: ecoff.c:1512 #, c-format msgid "" "\n" @@ -543,7 +618,7 @@ msgstr "" "\n" " Symbol slut+1: %-7ld Typ: %s" -#: ecoff.c:1628 +#: ecoff.c:1519 #, c-format msgid "" "\n" @@ -552,7 +627,7 @@ msgstr "" "\n" " Lokal symbol: %ld" -#: ecoff.c:1636 +#: ecoff.c:1527 #, c-format msgid "" "\n" @@ -561,7 +636,7 @@ msgstr "" "\n" " struct; symbol slut+1: %ld" -#: ecoff.c:1641 +#: ecoff.c:1532 #, c-format msgid "" "\n" @@ -570,7 +645,7 @@ msgstr "" "\n" " union; symbol slut+1: %ld" -#: ecoff.c:1646 +#: ecoff.c:1537 #, c-format msgid "" "\n" @@ -579,7 +654,7 @@ msgstr "" "\n" " enum; symbol slut+1: %ld" -#: ecoff.c:1652 +#: ecoff.c:1543 #, c-format msgid "" "\n" @@ -588,58 +663,139 @@ msgstr "" "\n" " Typ: %s" -#: elf-hppa.h:1458 elf-hppa.h:1491 elf-m10300.c:1628 elf64-sh64.c:1704 -#, c-format -msgid "%s: warning: unresolvable relocation against symbol `%s' from %s section" -msgstr "%s: varning: olöslig omlokalisering mot symbolen \"%s\" från sektionen %s" - -#: elf-m10200.c:442 elf-m10300.c:1695 elf32-arm.h:2088 elf32-avr.c:812 -#: elf32-cris.c:1390 elf32-d10v.c:570 elf32-fr30.c:634 elf32-frv.c:815 -#: elf32-h8300.c:528 elf32-i860.c:1028 elf32-ip2k.c:1586 elf32-iq2000.c:699 -#: elf32-m32r.c:1283 elf32-m68hc1x.c:1305 elf32-msp430.c:510 -#: elf32-openrisc.c:436 elf32-v850.c:1777 elf32-xstormy16.c:976 -#: elf64-mmix.c:1332 +#: elf-attrs.c:573 +msgid "error: %B: Object has vendor-specific contents that must be processed by the '%s' toolchain" +msgstr "fel: %B: Objektet har leverantörspecifikt innehÃ¥ll som mÃ¥ste behandlas av verktygskedjan ”%s”" + +#: elf-attrs.c:582 +msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'" +msgstr "fel: %B: Objektetikett ”%d, %s” är inkompatibel med etikett ”%d, %s”" + +#: elf-eh-frame.c:921 +msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" +msgstr "%P: fel i %B(%A); ingen .eh_frame_hdr-tabell kommer skapas.\n" + +#: elf-eh-frame.c:1193 +msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "%P: fde-kodningen i %B(%A) förhindrar att .eh_frame_hdr-tabell skapas.\n" + +#: elf-eh-frame.c:1612 +msgid "%P: DW_EH_PE_datarel unspecified for this architecture.\n" +msgstr "%P: DW_EH_PE_datarel ospecificerad för den här arkitekturen.\n" + +#: elf-ifunc.c:135 +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: dynamisk STT_GNU_IFUNC-symbol ”%s” med pekarmotsvarighet i ”%B” kan inte användas när en körfil framställs; kompilera om med -fPIE och länka om med -pie\n" + +#: elf-m10200.c:430 elf-m10300.c:2164 elf32-avr.c:1256 elf32-bfin.c:3220 +#: elf32-cr16.c:1484 elf32-cr16c.c:780 elf32-cris.c:2016 elf32-crx.c:922 +#: elf32-d10v.c:513 elf32-epiphany.c:557 elf32-fr30.c:589 elf32-frv.c:4039 +#: elf32-h8300.c:525 elf32-i860.c:1212 elf32-ip2k.c:1468 elf32-iq2000.c:688 +#: elf32-lm32.c:1160 elf32-m32c.c:553 elf32-m32r.c:3066 elf32-m68hc1x.c:1283 +#: elf32-mep.c:535 elf32-metag.c:1992 elf32-microblaze.c:1560 +#: elf32-moxie.c:282 elf32-mt.c:395 elf32-nds32.c:4910 elf32-openrisc.c:404 +#: elf32-score.c:2729 elf32-score7.c:2537 elf32-spu.c:5041 +#: elf32-tilepro.c:3666 elf32-v850.c:2281 elf32-xstormy16.c:936 +#: elf64-mmix.c:1538 elfxx-tilegx.c:4051 msgid "internal error: out of range error" -msgstr "internt fel: utanför intervallet" - -#: elf-m10200.c:446 elf-m10300.c:1699 elf32-arm.h:2092 elf32-avr.c:816 -#: elf32-cris.c:1394 elf32-d10v.c:574 elf32-fr30.c:638 elf32-frv.c:819 -#: elf32-h8300.c:532 elf32-i860.c:1032 elf32-iq2000.c:703 elf32-m32r.c:1287 -#: elf32-m68hc1x.c:1309 elf32-msp430.c:514 elf32-openrisc.c:440 -#: elf32-v850.c:1781 elf32-xstormy16.c:980 elf64-mmix.c:1336 elfxx-mips.c:6452 +msgstr "internt fel: utanför intervallet" + +#: elf-m10200.c:434 elf-m10300.c:2168 elf32-avr.c:1260 elf32-bfin.c:3224 +#: elf32-cr16.c:1488 elf32-cr16c.c:784 elf32-cris.c:2020 elf32-crx.c:926 +#: elf32-d10v.c:517 elf32-fr30.c:593 elf32-frv.c:4043 elf32-h8300.c:529 +#: elf32-i860.c:1216 elf32-iq2000.c:692 elf32-lm32.c:1164 elf32-m32c.c:557 +#: elf32-m32r.c:3070 elf32-m68hc1x.c:1287 elf32-mep.c:539 elf32-metag.c:1996 +#: elf32-microblaze.c:1564 elf32-moxie.c:286 elf32-msp430.c:1321 +#: elf32-nds32.c:4914 elf32-openrisc.c:408 elf32-score.c:2733 +#: elf32-score7.c:2541 elf32-spu.c:5045 elf32-tilepro.c:3670 elf32-v850.c:2285 +#: elf32-xstormy16.c:940 elf64-mmix.c:1542 elfxx-mips.c:9995 +#: elfxx-tilegx.c:4055 msgid "internal error: unsupported relocation error" -msgstr "internt fel: omlokaliseringen stöds inte" +msgstr "internt fel: omlokaliseringen stöds inte" -#: elf-m10200.c:450 elf-m10300.c:1703 elf32-arm.h:2096 elf32-d10v.c:578 -#: elf32-h8300.c:536 elf32-m32r.c:1291 elf32-m68hc1x.c:1313 +#: elf-m10200.c:438 elf32-cr16.c:1492 elf32-cr16c.c:788 elf32-crx.c:930 +#: elf32-d10v.c:521 elf32-h8300.c:533 elf32-lm32.c:1168 elf32-m32r.c:3074 +#: elf32-m68hc1x.c:1291 elf32-microblaze.c:1568 elf32-nds32.c:4918 +#: elf32-score.c:2737 elf32-score7.c:2545 elf32-spu.c:5049 msgid "internal error: dangerous error" msgstr "internt fel: farligt fel" -#: elf-m10200.c:454 elf-m10300.c:1707 elf32-arm.h:2100 elf32-avr.c:824 -#: elf32-cris.c:1402 elf32-d10v.c:582 elf32-fr30.c:646 elf32-frv.c:827 -#: elf32-h8300.c:540 elf32-i860.c:1040 elf32-ip2k.c:1601 elf32-iq2000.c:711 -#: elf32-m32r.c:1295 elf32-m68hc1x.c:1317 elf32-msp430.c:522 -#: elf32-openrisc.c:448 elf32-v850.c:1801 elf32-xstormy16.c:988 -#: elf64-mmix.c:1344 +#: elf-m10200.c:442 elf-m10300.c:2184 elf32-avr.c:1268 elf32-bfin.c:3232 +#: elf32-cr16.c:1496 elf32-cr16c.c:792 elf32-cris.c:2028 elf32-crx.c:934 +#: elf32-d10v.c:525 elf32-epiphany.c:572 elf32-fr30.c:601 elf32-frv.c:4051 +#: elf32-h8300.c:537 elf32-i860.c:1224 elf32-ip2k.c:1483 elf32-iq2000.c:700 +#: elf32-lm32.c:1172 elf32-m32c.c:565 elf32-m32r.c:3078 elf32-m68hc1x.c:1295 +#: elf32-mep.c:547 elf32-metag.c:2004 elf32-microblaze.c:1572 +#: elf32-moxie.c:294 elf32-msp430.c:1329 elf32-mt.c:403 elf32-nds32.c:4922 +#: elf32-openrisc.c:416 elf32-score.c:2746 elf32-score7.c:2549 +#: elf32-spu.c:5053 elf32-tilepro.c:3678 elf32-v850.c:2305 +#: elf32-xstormy16.c:948 elf64-mmix.c:1550 elfxx-tilegx.c:4063 msgid "internal error: unknown error" -msgstr "internt fel: okänt fel" +msgstr "internt fel: okänt fel" -#: elf.c:372 +#: elf-m10300.c:1021 #, c-format -msgid "%s: invalid string offset %u >= %lu for section `%s'" -msgstr "%s: ogiltigt strängavstånd %u >= %lu för sektionen \"%s\"" +msgid "%s: Unsupported transition from %s to %s" +msgstr "%s:ÖvergÃ¥ng frÃ¥n %s till %s stöds ej" -#: elf.c:624 -#, c-format -msgid "%s: invalid SHT_GROUP entry" -msgstr "%s: ogiltig SHT_GROUP-post" +#: elf-m10300.c:1213 +msgid "%B: %s' accessed both as normal and thread local symbol" +msgstr "%B: %s' hade Ã¥tkomst bÃ¥de som normal och trÃ¥dlokal symbol" -#: elf.c:695 -#, c-format -msgid "%s: no group info for section %s" -msgstr "%s: ingen gruppinformation för sektionen %s" +#: elf-m10300.c:2108 elf32-arm.c:10632 elf32-i386.c:4363 elf32-m32r.c:2558 +#: elf32-m68k.c:4120 elf32-s390.c:3303 elf32-sh.c:4109 elf32-tilepro.c:3569 +#: elf32-xtensa.c:3063 elf64-s390.c:3229 elf64-sh64.c:1640 elf64-x86-64.c:4463 +#: elfxx-sparc.c:3904 elfxx-tilegx.c:3974 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4450 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): olöslig omplacering av %s mot symbol ”%s”" + +#: elf-m10300.c:2173 +msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" +msgstr "fel: olämplig omplaceringstyp för delat bibliotek (glömde du -fpic?)" + +#: elf-m10300.c:2176 +msgid "%B: taking the address of protected function '%s' cannot be done when making a shared library" +msgstr "%B: ta adressen för den skyddade funktionen ”%s” kan inte göras vid skapandet av ett delat bibliotek" + +#: elf-m10300.c:2179 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "internt fel: suspekt omlokaliseringstyp för delade bibliotek" + +#: elf.c:343 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "%B: ogiltig strängförskjutning %u >= %lu för sektion ”%s”" + +#: elf.c:455 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "%B symbol nummer %lu refererar icke existerande SHT_SYMTAB_SHNDX sektion" + +#: elf.c:611 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "%B: Korrupt storleksfält i gruppsektionshuvudet: 0x%lx" -#: elf.c:1055 +#: elf.c:647 +msgid "%B: invalid SHT_GROUP entry" +msgstr "%B: ogiltig SHT_GROUP post" + +#: elf.c:717 +msgid "%B: no group info for section %A" +msgstr "%B: ingen gruppinformation för sektion %A" + +#: elf.c:746 elf.c:3144 elflink.c:10290 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "%B: varning: sh_link inte satt för sektion ”%A”" + +#: elf.c:765 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "%B: sh_link [%d] i sektion ”%A” är inkorrekt" + +#: elf.c:800 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "%B: okänd [%d] sektion ”%s” i grupp [%s]" + +#: elf.c:1174 +#, c-format msgid "" "\n" "Program Header:\n" @@ -647,7 +803,8 @@ msgstr "" "\n" "Programhuvud:\n" -#: elf.c:1106 +#: elf.c:1216 +#, c-format msgid "" "\n" "Dynamic Section:\n" @@ -655,7 +812,8 @@ msgstr "" "\n" "Dynamisk sektion:\n" -#: elf.c:1235 +#: elf.c:1352 +#, c-format msgid "" "\n" "Version definitions:\n" @@ -663,7 +821,8 @@ msgstr "" "\n" "Versionsdefinitioner:\n" -#: elf.c:1258 +#: elf.c:1377 +#, c-format msgid "" "\n" "Version References:\n" @@ -671,2102 +830,5445 @@ msgstr "" "\n" "Versionsreferenser:\n" -#: elf.c:1263 +#: elf.c:1382 #, c-format msgid " required from %s:\n" -msgstr " krävs från %s:\n" +msgstr " krävs frÃ¥n %s:\n" -#: elf.c:1944 -#, c-format -msgid "%s: invalid link %lu for reloc section %s (index %u)" -msgstr "%s: ogiltig länk %lu för omlokaliseringssektion %s (index %u)" +#: elf.c:1807 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "%B: ogiltig länk %lu för omlokaliseringssektion %s (index %u)" -#: elf.c:3686 -#, c-format -msgid "%s: Not enough room for program headers (allocated %u, need %u)" -msgstr "%s: Inte tillräckligt med utrymme för programhuvuden (allokerade %u, behöver %u)" +#: elf.c:1977 +msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +msgstr "%B: vet ej hur att hantera allokerad, programspecifik sektion ”%s” [0x%8x]" -#: elf.c:3791 -#, c-format -msgid "%s: Not enough room for program headers, try linking with -N" -msgstr "%s: Inte tillräckligt med utrymme för programhuvuden, försök att länka med -N" +#: elf.c:1989 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "%B: vet ej hur att hantera processorspecifik sektion ”%s” [0x%8x]" -#: elf.c:3922 -#, c-format -msgid "Error: First section in segment (%s) starts at 0x%x whereas the segment starts at 0x%x" -msgstr "Fel: Första sektionen i segmentet (%s) börjar vid 0x%x medan segmentet börjar med 0x%x" +#: elf.c:2000 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "%B: vet ej hur att hantera OS-specifik sektion ”%s” [0x%8x]" -#: elf.c:4242 -#, c-format -msgid "%s: warning: allocated section `%s' not in segment" -msgstr "%s: varning: allokerad sektion \"%s\" inte i segment" +#: elf.c:2010 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "%B: vet ej hur att hantera sektion ”%s” [0x%8x]" -#: elf.c:4566 +#: elf.c:2648 #, c-format -msgid "%s: symbol `%s' required but not present" -msgstr "%s: symbolen \"%s\" krävs men finns inte med" +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "varning: sektion ”%A” typ ändrades till PROGBITS" -#: elf.c:4854 -#, c-format -msgid "%s: warning: Empty loadable segment detected, is this intentional ?\n" -msgstr "%s: varning: Tomt inläsningsbart segment upptäckt, är detta meningen?\n" +#: elf.c:3015 +msgid "%B: too many sections: %u" +msgstr "%B: för mÃ¥nga sektioner: %u" -#: elf.c:5485 -#, c-format -msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" -msgstr "Kan inte hitta ekvivalent utdatasektion för symbolen \"%s\" från sektionen \"%s\"" +#: elf.c:3101 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "%B: sh_link frÃ¥n sektion ”%A” pekar pÃ¥ kastad sektion ”%A” av ”%B”" -#: elf.c:6298 -#, c-format -msgid "%s: unsupported relocation type %s" -msgstr "%s: omlokaliseringstypen %s stöds inte" +#: elf.c:3124 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "%B: sh_link frÃ¥n sektion ”%A” pekar pÃ¥ borttagen sektion ”%A” av ”%B”" -#: elf32-arm.h:1228 -#, c-format -msgid "%s: Warning: Arm BLX instruction targets Arm function '%s'." -msgstr "%s: Varning: Arm BLX-instruktion använder Arm-funktionen \"%s\" som mål." +#: elf.c:4126 +msgid "%B: TLS sections are not adjacent:" +msgstr "%B: TLS-sektion är inte närliggande:" -#: elf32-arm.h:1424 +#: elf.c:4133 #, c-format -msgid "%s: Warning: Thumb BLX instruction targets thumb function '%s'." -msgstr "%s: Varning: Thumb BLX-instruktionen använder thumb-funktionen \"%s\" som mål." +msgid "\t TLS: %A" +msgstr "\t TLS: %A" -#: elf32-arm.h:1918 elf32-sh.c:4706 elf64-sh64.c:1613 +#: elf.c:4137 #, c-format -msgid "%s(%s+0x%lx): %s relocation against SEC_MERGE section" -msgstr "%s(%s+0x%lx): %s omlokalisering mot SEC_MERGE-sektion" +msgid "\tnon-TLS: %A" +msgstr "\tej-TLS: %A" -#: elf32-arm.h:2012 -#, c-format -msgid "%s: warning: unresolvable relocation %d against symbol `%s' from %s section" -msgstr "%s: varning: olöslig omlokalisering %d mot symbolen \"%s\" från sektionen %s" +#: elf.c:4596 +msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%B: Den första sektionen i PT_DYNAMIC segment är inte .dynamic-sektionen" -#: elf32-arm.h:2202 -#, c-format -msgid "Warning: Clearing the interworking flag of %s because non-interworking code in %s has been linked with it" -msgstr "Varning: Stänger av samverkandeflaggan i %s eftersom icke-samverkande kod i %s har länkats med det" +#: elf.c:4621 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "%B: Inte tillräckligt med utrymme för programhuvud, försök länka med -N" -#: elf32-arm.h:2302 -#, c-format -msgid "ERROR: %s is compiled for EABI version %d, whereas %s is compiled for version %d" -msgstr "FEL: %s är kompilerad för EABI version %d, medan %s är kompilerad för version %d" +#: elf.c:4707 +msgid "%B: section %A lma %#lx adjusted to %#lx" +msgstr "%B: sektion %A lma %#lx justerad till %#lx" -#: elf32-arm.h:2316 -#, c-format -msgid "ERROR: %s is compiled for APCS-%d, whereas target %s uses APCS-%d" -msgstr "FEL: %s är kompilerad för APCS-%d, medan målet %s använder APCS-%d" +#: elf.c:4843 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "%B: sektion ”%A” kan inte allokeras i segment %d" + +#: elf.c:4892 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "%B: varning: allokerat segment ”%s” är inte i sektionen" -#: elf32-arm.h:2344 +#: elf.c:5473 +msgid "%B: symbol `%s' required but not present" +msgstr "%B: symbol ”%s” krävs men är inte tillgänglig" + +#: elf.c:5811 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "%B: varning: Tomt laddningsbart segment detekterat, är detta avsiktligt?\n" + +#: elf.c:6867 #, c-format -msgid "ERROR: %s uses VFP instructions, whereas %s does not" -msgstr "FEL: %s använder VFP-instruktioner, men det gör inte %s" +msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "Kan inte hitta ekvivalent utdatasektion för symbolen ”%s” frÃ¥n sektionen ”%s”" + +#: elf.c:7915 +msgid "%B: unsupported relocation type %s" +msgstr "%B: omlokaliseringstyp %s saknar stöd" + +#: elf32-arm.c:3722 elf32-arm.c:7051 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: Thumb call to ARM" +msgstr "" +"%B(%s): varning: samverkan inte aktiverat.\n" +" första förekomst: %B: Thumb-anrop till ARM" + +#: elf32-arm.c:3769 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: ARM call to Thumb" +msgstr "" +"%B(%s): varning: samverkan inte aktiverat.\n" +" första förekomst: %B: ARM-anrop till Thumb" -#: elf32-arm.h:2349 +#: elf32-arm.c:3988 elf32-arm.c:5433 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:2324 #, c-format -msgid "ERROR: %s uses FPA instructions, whereas %s does not" -msgstr "FEL: %s använder FPA-instruktioner, men det gör inte %s" +msgid "%s: cannot create stub entry %s" +msgstr "%s: kan inte skapa stubbstarten %s" -#: elf32-arm.h:2360 elf32-arm.h:2365 +#: elf32-arm.c:5549 #, c-format -msgid "ERROR: %s uses Maverick instructions, whereas %s does not" -msgstr "FEL: %s använder Maverick-instruktioner, men det gör inte %s" +msgid "unable to find THUMB glue '%s' for '%s'" +msgstr "kunde inte hitta THUMB-klister ”%s” för ”%s”" -#: elf32-arm.h:2385 +#: elf32-arm.c:5585 #, c-format -msgid "ERROR: %s uses software FP, whereas %s uses hardware FP" -msgstr "FEL: %s använder programvaruflyttal, medan %s använder hårdvaruflyttal" +msgid "unable to find ARM glue '%s' for '%s'" +msgstr "kunde inte hitta ARM-klister ”%s” för ”%s”" -#: elf32-arm.h:2390 +#: elf32-arm.c:6123 +msgid "%B: BE8 images only valid in big-endian mode." +msgstr "%B: BE8-avbilder bara giltiga i läge med rak byteordning." + +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:6353 +msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%B: varning: vald problemlösning VFP11 behövs inte för destinationsarkitektur" + +#: elf32-arm.c:6897 elf32-arm.c:6917 +msgid "%B: unable to find VFP11 veneer `%s'" +msgstr "%B: kan inte hitta VFP11-lagret ”%s”" + +#: elf32-arm.c:6966 #, c-format -msgid "ERROR: %s uses hardware FP, whereas %s uses software FP" -msgstr "FEL: %s använder hårdvaruflyttal, medan %s använder programvaruflyttal" +msgid "Invalid TARGET2 relocation type '%s'." +msgstr "Ogiltig TARGET2-omlokaliseringstyp ”%s”." + +#. PR ld/16017: Do not generate ARM instructions for +#. the PLT if compiling for a thumb-only target. +#. +#. FIXME: We ought to be able to generate thumb PLT instructions... +#: elf32-arm.c:7696 +msgid "%B: Warning: thumb mode PLT generation not currently supported" +msgstr "%B: Varning: tumläges PLT-generering stöds ej" + +#: elf32-arm.c:7909 +msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline" +msgstr "%B(%A+0x%lx): oväntad Thumb-instruktion ”0x%x” i TLS-trampolin" + +#: elf32-arm.c:7948 +msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' in TLS trampoline" +msgstr "%B(%A+0x%lx): oväntad ARM-instruktion ”0x%x” i TLS-trampolin" + +#: elf32-arm.c:8412 +msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." +msgstr "\\%B: Varning: Arm BLX-instruktion pekar mot Arm-funktionen ”%s”." + +#: elf32-arm.c:8831 +msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." +msgstr "%B: Varning: Thumb BLX-instruktion pekar mot thumb-funktionen ”%s”." + +#: elf32-arm.c:9672 +msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC" +msgstr "%B(%A+0x%lx): oväntad Thumb-instruktion ”0x%x” hänvisad till av TLS_GOTDESC" + +#: elf32-arm.c:9695 +msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' referenced by TLS_GOTDESC" +msgstr "%B(%A+0x%lx): oväntad ARM-instruktion ”0x%x” hänvisad till av TLS_GOTDESC" + +#: elf32-arm.c:9724 +msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_ARM_TLS_LE32-omlokalisering tillÃ¥ts inte i delat objekt" + +#: elf32-arm.c:9937 +msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%B(%A+0x%lx): Enbart ADD- eller SUB-instruktioner tillÃ¥ts för ALU-gruppsomlokaliseringar" + +#: elf32-arm.c:9977 elf32-arm.c:10065 elf32-arm.c:10149 elf32-arm.c:10235 +msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" +msgstr "%B(%A+0x%lx): Överflöde vid delning av 0x%lx för gruppomlokalisering %s" + +#: elf32-arm.c:10474 elf32-sh.c:3994 elf64-sh64.c:1544 +msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" +msgstr "%B(%A+0x%lx): %s-omlokalisering mot SEC_MERGE-sektion" + +#: elf32-arm.c:10585 elf32-m68k.c:4155 elf32-xtensa.c:2799 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4192 +msgid "%B(%A+0x%lx): %s used with TLS symbol %s" +msgstr "%B(%A+0x%lx): %s används med TLS-symbolen %s" + +#: elf32-arm.c:10586 elf32-m68k.c:4156 elf32-xtensa.c:2800 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4193 +msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" +msgstr "%B(%A+0x%lx): %s används med icke-TLS-symbolen %s" + +#: elf32-arm.c:10666 elf32-tic6x.c:2736 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4481 +msgid "out of range" +msgstr "utanför intervall" + +#: elf32-arm.c:10670 elf32-nios2.c:3525 elf32-tic6x.c:2740 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4485 +msgid "unsupported relocation" +msgstr "omlokalisering utan stöd" + +#: elf32-arm.c:10678 elf32-nios2.c:3535 elf32-tic6x.c:2748 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4493 +msgid "unknown error" +msgstr "okänt fel" + +#: elf32-arm.c:11153 +msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" +msgstr "Varning: Rensar %Bs samverkandeflagga eftersom ej samverkande kod i %B har länkats till den" + +#: elf32-arm.c:11240 +msgid "%B: Unknown mandatory EABI object attribute %d" +msgstr "%B: Okänt obligatoriskt EABI-objektattribut %d" + +#: elf32-arm.c:11248 +msgid "Warning: %B: Unknown EABI object attribute %d" +msgstr "Varning: %B: Okänt EABI-objektattribut %d" + +#: elf32-arm.c:11449 +msgid "error: %B: Unknown CPU architecture" +msgstr "fel: %B: Okänd CPU-arkitektur" + +#: elf32-arm.c:11487 +msgid "error: %B: Conflicting CPU architectures %d/%d" +msgstr "fel: %B: Motstridiga CPU-arkitekturer %d/%d" + +#: elf32-arm.c:11576 +msgid "Error: %B has both the current and legacy Tag_MPextension_use attributes" +msgstr "Fel: %B har bÃ¥de aktuella och förÃ¥ldrade Tag_MPextension_use-attribut" + +#: elf32-arm.c:11601 +msgid "error: %B uses VFP register arguments, %B does not" +msgstr "fel: %B använder VFP-registerargument, men inte %B" + +#: elf32-arm.c:11747 +msgid "error: %B: unable to merge virtualization attributes with %B" +msgstr "fel: %B: kunde inte sammanfoga virtualiseringsattribut med %B" + +#: elf32-arm.c:11773 +msgid "error: %B: Conflicting architecture profiles %c/%c" +msgstr "fel: %B: Motstridiga arkitekturprofiler %c/%c" + +#: elf32-arm.c:11877 +msgid "Warning: %B: Conflicting platform configuration" +msgstr "Varning: %B: Motstridig plattformskonfigurering" + +#: elf32-arm.c:11886 +msgid "error: %B: Conflicting use of R9" +msgstr "fel: %B: Konflikt vid användande av R9" + +#: elf32-arm.c:11898 +msgid "error: %B: SB relative addressing conflicts with use of R9" +msgstr "fel: %B: SB-relativ adressering kolliderar med användande av R9" + +#: elf32-arm.c:11911 +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 "varning: %B använder %u-byte wchar_t, men utdata ska använda %u-byte wchar_t; användning av wchar_t-värden mellan objekt kanske inte fungerar" + +#: elf32-arm.c:11942 +msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" +msgstr "varning: %B använder %s enum, men utdata ska använda %s enum; användning av enum-värden mellan objekt kanske inte fungerar" + +#: elf32-arm.c:11954 +msgid "error: %B uses iWMMXt register arguments, %B does not" +msgstr "fel: %B använder iWMMXt-registerargument, men inte %B" + +#: elf32-arm.c:11971 +msgid "error: fp16 format mismatch between %B and %B" +msgstr "fel: fp16-format stämmer inte överens mellan %B och %B" + +#: elf32-arm.c:12007 +msgid "%B has has both the current and legacy Tag_MPextension_use attributes" +msgstr "%B har bÃ¥de aktuella och förÃ¥ldrade Tag_MPextension_use-attribut" #. Ignore init flag - it may not be set, despite the flags field #. containing valid data. -#: elf32-arm.h:2443 elf32-cris.c:2975 elf32-m68hc1x.c:1459 elf32-m68k.c:397 -#: elf32-vax.c:546 elfxx-mips.c:9238 +#. 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:12095 elf32-bfin.c:4949 elf32-cris.c:4139 elf32-m68hc1x.c:1427 +#: elf32-m68k.c:1195 elf32-score.c:4004 elf32-score7.c:3808 elf32-vax.c:529 +#: elf32-xgate.c:674 elfxx-mips.c:14955 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4645 #, c-format msgid "private flags = %lx:" msgstr "privata flaggor = %lx:" -#: elf32-arm.h:2452 +#: elf32-arm.c:12104 +#, c-format msgid " [interworking enabled]" -msgstr " [samverkande är aktiverat]" +msgstr " [samverkande är aktiverat]" -#: elf32-arm.h:2460 +#: elf32-arm.c:12112 +#, c-format msgid " [VFP float format]" msgstr " [VFP-flyttalsformat]" -#: elf32-arm.h:2462 +#: elf32-arm.c:12114 +#, c-format msgid " [Maverick float format]" msgstr " [Maverick-flyttalsformat]" -#: elf32-arm.h:2464 +#: elf32-arm.c:12116 +#, c-format msgid " [FPA float format]" msgstr " [FPA-flyttalsformat]" -#: elf32-arm.h:2473 +#: elf32-arm.c:12125 +#, c-format msgid " [new ABI]" msgstr " [nytt ABI]" -#: elf32-arm.h:2476 +#: elf32-arm.c:12128 +#, c-format msgid " [old ABI]" msgstr " [gammalt ABI]" -#: elf32-arm.h:2479 +#: elf32-arm.c:12131 +#, c-format msgid " [software FP]" msgstr " [programvaru-FP]" -#: elf32-arm.h:2488 +#: elf32-arm.c:12140 +#, c-format msgid " [Version1 EABI]" msgstr " [Version1 EABI]" -#: elf32-arm.h:2491 elf32-arm.h:2502 +#: elf32-arm.c:12143 elf32-arm.c:12154 +#, c-format msgid " [sorted symbol table]" msgstr " [sorterad symboltabell]" -#: elf32-arm.h:2493 elf32-arm.h:2504 +#: elf32-arm.c:12145 elf32-arm.c:12156 +#, c-format msgid " [unsorted symbol table]" msgstr " [osorterad symboltabell]" -#: elf32-arm.h:2499 +#: elf32-arm.c:12151 +#, c-format msgid " [Version2 EABI]" msgstr " [Version2 EABI]" -#: elf32-arm.h:2507 +#: elf32-arm.c:12159 +#, c-format msgid " [dynamic symbols use segment index]" -msgstr " [dynamiska symboler använder segmentindex]" +msgstr " [dynamiska symboler använder segmentindex]" -#: elf32-arm.h:2510 +#: elf32-arm.c:12162 +#, c-format msgid " [mapping symbols precede others]" -msgstr " [mappsymboler har företräde före andra]" +msgstr " [mappsymboler har företräde före andra]" -#: elf32-arm.h:2517 -msgid " " -msgstr " " - -#: elf32-arm.h:2524 -msgid " [relocatable executable]" -msgstr " [omlokaliseringsbar körbar fil]" - -#: elf32-arm.h:2527 -msgid " [has entry point]" -msgstr " [har startpunkt]" - -#: elf32-arm.h:2532 -msgid "" -msgstr "" +#: elf32-arm.c:12169 +#, c-format +msgid " [Version3 EABI]" +msgstr " [Version3 EABI]" -#: elf32-avr.c:820 elf32-cris.c:1398 elf32-fr30.c:642 elf32-frv.c:823 -#: elf32-i860.c:1036 elf32-ip2k.c:1597 elf32-iq2000.c:707 elf32-msp430.c:518 -#: elf32-openrisc.c:444 elf32-v850.c:1785 elf32-xstormy16.c:984 -#: elf64-mmix.c:1340 -msgid "internal error: dangerous relocation" -msgstr "internt fel: farlig omlokalisering" +#: elf32-arm.c:12173 +#, c-format +msgid " [Version4 EABI]" +msgstr " [Version4 EABI]" -#: elf32-cris.c:931 +#: elf32-arm.c:12177 #, c-format -msgid "%s: unresolvable relocation %s against symbol `%s' from %s section" -msgstr "%s: olöslig omlokalisering %s mot symbolen \"%s\" från sektionen %s" +msgid " [Version5 EABI]" +msgstr " [Version5 EABI]" -#: elf32-cris.c:993 +#: elf32-arm.c:12180 #, c-format -msgid "%s: No PLT nor GOT for relocation %s against symbol `%s' from %s section" -msgstr "%s: Varken någon PLT eller GOT för omlokalisering %s mot symbolen \"%s\" från sektionen %s" +msgid " [soft-float ABI]" +msgstr " [mjuk-flyttal ABI]" -#: elf32-cris.c:996 elf32-cris.c:1122 -msgid "[whose name is lost]" -msgstr "[vars namn tappats bort]" +#: elf32-arm.c:12183 +#, c-format +msgid " [hard-float ABI]" +msgstr " [hÃ¥rt-flyttal ABI]" -#: elf32-cris.c:1111 +#: elf32-arm.c:12189 #, c-format -msgid "%s: relocation %s with non-zero addend %d against local symbol from %s section" -msgstr "%s: omlokalisering %s med icke-tomt addendum %d mot lokal symbol från sektionen %s" +msgid " [BE8]" +msgstr " [BE8]" -#: elf32-cris.c:1118 +#: elf32-arm.c:12192 #, c-format -msgid "%s: relocation %s with non-zero addend %d against symbol `%s' from %s section" -msgstr "%s: omlokalisering %s med icke-tomt addendum %d mot symbolen \"%s\" från sektionen %s" +msgid " [LE8]" +msgstr " [LE8]" -#: elf32-cris.c:1143 +#: elf32-arm.c:12198 #, c-format -msgid "%s: relocation %s is not allowed for global symbol: `%s' from %s section" -msgstr "%s: omlokaliseringen %s är inte tillåten för global symbol: \"%s\" från sektionen %s" +msgid " " +msgstr " " -#: elf32-cris.c:1158 +#: elf32-arm.c:12205 #, c-format -msgid "%s: relocation %s in section %s with no GOT created" -msgstr "%s: omlokalisering %s i sektionen %s utan GOT skapad" +msgid " [relocatable executable]" +msgstr " [omlokaliseringsbar körbar fil]" -#: elf32-cris.c:1277 +#: elf32-arm.c:12208 #, c-format -msgid "%s: Internal inconsistency; no relocation section %s" -msgstr "%s: Intern inkonsistens; ingen omlokaliseringssektion %s" +msgid " [has entry point]" +msgstr " [har startpunkt]" -#: elf32-cris.c:2500 +#: elf32-arm.c:12213 /src/binutils-gdb/bfd/elfnn-aarch64.c:4648 #, c-format -msgid "" -"%s, section %s:\n" -" relocation %s should not be used in a shared object; recompile with -fPIC" -msgstr "" -"%s, sektion %s:\n" -" omlokaliseringen %s bör inte användas i ett delat objekt; kompilera om med -fPIC" +msgid "" +msgstr "" + +#: elf32-arm.c:12522 elf32-i386.c:1452 elf32-s390.c:1005 elf32-tic6x.c:2812 +#: elf32-tilepro.c:1511 elf32-xtensa.c:999 elf64-s390.c:927 +#: elf64-x86-64.c:1467 elfxx-sparc.c:1415 elfxx-tilegx.c:1728 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:5038 +msgid "%B: bad symbol index: %d" +msgstr "%B: felaktigt symbolindex: %d" + +#: elf32-arm.c:12674 elf32-metag.c:2283 elf64-x86-64.c:1593 +#: elf64-x86-64.c:1771 elfxx-mips.c:8482 +msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: omlokalisering %s mot ”%s” kan inte användas när ett delat objekt skapas; kompilera om med -fPIC" + +#: elf32-arm.c:13796 +#, c-format +msgid "Errors encountered processing file %s" +msgstr "Fel inträffade vid bearbetning av filen %s" + +#: elf32-arm.c:14230 +#, c-format +msgid "error: required section '%s' not found in the linker script" +msgstr "fel: krävd sektion ”%s” inte funnen i länkarens skript" + +#: elf32-arm.c:15252 +msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location" +msgstr "%B: fel: Cortex-A8 felstubbe har tilldelats en osäker plats" + +#. There's not much we can do apart from complain if this +#. happens. +#: elf32-arm.c:15279 +msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)" +msgstr "%B: fel: Cortex-A8 felstubbe utanför intervallet (indatafilen är för stor)" + +#: elf32-arm.c:15373 elf32-arm.c:15395 +msgid "%B: error: VFP11 veneer out of range" +msgstr "%B: fel: VFP11-lager utanför intervall" + +#: elf32-arm.c:16020 +msgid "error: %B is already in final BE8 format" +msgstr "fel: %B är redan i färdigt BE8-format" + +#: elf32-arm.c:16096 +msgid "error: Source object %B has EABI version %d, but target %B has EABI version %d" +msgstr "fel: Källkodsobjekt %B har EABI-version %d, men destinationen %B har EABI-version %d" + +#: elf32-arm.c:16112 +msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +msgstr "fel: %B kompilerades för APCS-%d, medan destinationen %B använder APCS-%d" + +#: elf32-arm.c:16137 +msgid "error: %B uses VFP instructions, whereas %B does not" +msgstr "fel: %B använder VFP-instruktioner, men inte %B" + +#: elf32-arm.c:16141 +msgid "error: %B uses FPA instructions, whereas %B does not" +msgstr "fel: %B använder FPA-instruktioner, men inte %B" + +#: elf32-arm.c:16151 +msgid "error: %B uses Maverick instructions, whereas %B does not" +msgstr "fel: %B använder Maverick-instruktioner, men inte %B" + +#: elf32-arm.c:16155 +msgid "error: %B does not use Maverick instructions, whereas %B does" +msgstr "fel: %B använder inte Maverick-instruktioner, men det gör %B" + +#: elf32-arm.c:16174 +msgid "error: %B uses software FP, whereas %B uses hardware FP" +msgstr "fel: %B använder FP i mjukvara, medan %B använder FP i hÃ¥rdvara" + +#: elf32-arm.c:16178 +msgid "error: %B uses hardware FP, whereas %B uses software FP" +msgstr "fel: %B använder FP i hÃ¥rdvara, medan %B använder FP i mjukvara" + +#: elf32-avr.c:1264 elf32-bfin.c:3228 elf32-cris.c:2024 elf32-epiphany.c:568 +#: elf32-fr30.c:597 elf32-frv.c:4047 elf32-i860.c:1220 elf32-ip2k.c:1479 +#: elf32-iq2000.c:696 elf32-m32c.c:561 elf32-mep.c:543 elf32-metag.c:2000 +#: elf32-moxie.c:290 elf32-msp430.c:1325 elf32-mt.c:399 elf32-openrisc.c:412 +#: elf32-tilepro.c:3674 elf32-v850.c:2289 elf32-xstormy16.c:944 +#: elf64-mmix.c:1546 elfxx-tilegx.c:4059 +msgid "internal error: dangerous relocation" +msgstr "internt fel: farlig omlokalisering" -#: elf32-cris.c:2978 -msgid " [symbols have a _ prefix]" -msgstr " [symboler har ett _-prefix]" +#: elf32-avr.c:2476 elf32-hppa.c:578 elf32-m68hc1x.c:160 elf32-metag.c:1197 +#: elf32-nios2.c:1357 +msgid "%B: cannot create stub entry %s" +msgstr "%B: kan inte skapa stubbpost %s" -#: elf32-cris.c:3017 -#, c-format -msgid "%s: uses _-prefixed symbols, but writing file with non-prefixed symbols" -msgstr "%s: använder symboler med _-prefix, men skriver fil med symboler utan prefix" +#: elf32-bfin.c:107 elf32-bfin.c:363 +msgid "relocation should be even number" +msgstr "omlokalisering bör ske med jämna siffror" -#: elf32-cris.c:3018 -#, c-format -msgid "%s: uses non-prefixed symbols, but writing file with _-prefixed symbols" -msgstr "%s: använder symboler utan prefix, men skriver fil med symboler med _-prefix" +#: elf32-bfin.c:1601 +msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): olöslig omlokalisering mot symbol ”%s”" -#: elf32-frv.c:1223 -#, c-format -msgid "%s: compiled with %s and linked with modules that use non-pic relocations" -msgstr "%s: kompilerad med %s och länkad med moduler som använder icke-pic-omlokalisering" +#: elf32-bfin.c:1634 elf32-i386.c:4406 elf32-m68k.c:4197 elf32-s390.c:3364 +#: elf64-s390.c:3290 elf64-x86-64.c:4506 +msgid "%B(%A+0x%lx): reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): omlokalisering mot ”%s”: fel %d" -#: elf32-frv.c:1273 elf32-iq2000.c:895 -#, c-format -msgid "%s: compiled with %s and linked with modules compiled with %s" -msgstr "%s: kompilerad med %s och länkad med moduler som kompilerats med %s" +#: elf32-bfin.c:2732 +msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" +msgstr "%B. omlokalisering vid ”%A+0x%x” använder symbolen ”%s” med en addend som inte är noll" -#: elf32-frv.c:1285 -#, c-format -msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%s: använder andra okända e_flags-fält (0x%lx) än tidigare moduler (0x%lx)" +#: elf32-bfin.c:2748 +msgid "relocation references symbol not defined in the module" +msgstr "omlokalisering använder symbol som inte definierats i modulen" -#: elf32-frv.c:1321 elf32-iq2000.c:933 -#, c-format -msgid "private flags = 0x%lx:" -msgstr "privata flaggor = 0x%lx:" +#: elf32-bfin.c:2845 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC använder dynamisk symbol med en addend som inte är noll" -#: elf32-gen.c:83 elf64-gen.c:82 -#, c-format -msgid "%s: Relocations in generic ELF (EM: %d)" -msgstr "%s: Omlokalisering i allmän ELF (EM: %d)" +#: elf32-bfin.c:2886 elf32-bfin.c:3009 +msgid "cannot emit fixups in read-only section" +msgstr "kan inte skicka fixar till en skrivskyddad sektion" -#: elf32-hppa.c:672 elf32-m68hc1x.c:176 elf64-ppc.c:3118 -#, c-format -msgid "%s: cannot create stub entry %s" -msgstr "%s: kan inte skapa stubbstarten %s" +#: elf32-bfin.c:2917 elf32-bfin.c:3047 elf32-lm32.c:1095 elf32-sh.c:4913 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "kan inte skicka dynamiska omlokaliseringar till en skrivskyddad sektion" -#: elf32-hppa.c:957 elf32-hppa.c:3538 -#, c-format -msgid "%s(%s+0x%lx): cannot reach %s, recompile with -ffunction-sections" -msgstr "%s(%s+0x%lx): kan inte nå %s, kompilera om med -ffunction-sections" +#: elf32-bfin.c:2967 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC_VALUE använder dynamisk symbol med addend som inte är noll" -#: elf32-hppa.c:1340 elf64-x86-64.c:672 elf64-x86-64.c:797 -#, c-format -msgid "%s: relocation %s can not be used when making a shared object; recompile with -fPIC" -msgstr "%s: omlokaliseringen %s kan inte användas då ett delat objekt skapas; kompilera om med -fPIC" +#: elf32-bfin.c:3132 +msgid "relocations between different segments are not supported" +msgstr "omlokaliseringar mellan olika segment saknar stöd" -#: elf32-hppa.c:1360 -#, c-format -msgid "%s: relocation %s should not be used when making a shared object; recompile with -fPIC" -msgstr "%s: omlokaliseringen %s bör inte användas då ett delat objekt skapas; kompilera om med -fPIC" +#: elf32-bfin.c:3133 +msgid "warning: relocation references a different segment" +msgstr "varning: omlokalisering använder ett annat segment" -#: elf32-hppa.c:1553 -#, c-format -msgid "Could not find relocation section for %s" -msgstr "Kunde inte hitta omlokaliseringssektion för %s" +#: elf32-bfin.c:4907 +msgid "%B: unsupported relocation type %i" +msgstr "%B: omlokaliseringstyp %i saknar stöd" -#: elf32-hppa.c:2828 +#: elf32-bfin.c:4995 elf32-frv.c:6600 #, c-format -msgid "%s: duplicate export stub %s" -msgstr "%s: dubbel exportstubb %s" +msgid "%s: cannot link non-fdpic object file into fdpic executable" +msgstr "%s: kan inte länka icke-fdpic-objektfil till fdpic-körfil" -#: elf32-hppa.c:3416 +#: elf32-bfin.c:4999 elf32-frv.c:6604 #, c-format -msgid "%s(%s+0x%lx): fixing %s" -msgstr "%s(%s+0x%lx): fixar %s" +msgid "%s: cannot link fdpic object file into non-fdpic executable" +msgstr "%s: kan inte länka fdpic-objektfil till icke-fdpic-körfil" -#: elf32-hppa.c:4039 +#: elf32-bfin.c:5153 #, c-format -msgid "%s(%s+0x%lx): cannot handle %s for %s" -msgstr "%s(%s+0x%lx): kan inte hantera %s för %s" +msgid "*** check this relocation %s" +msgstr "*** kontrollera denna omlokalisering: %s" -#: elf32-hppa.c:4357 -msgid ".got section not immediately after .plt section" -msgstr ".got-sektionen följer inte omedelbart efter .plt-sektion" +#: elf32-cris.c:1110 +msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" +msgstr "%B, sektion %A: oläslig omlokalisering %s mot symbol ”%s”" -#: elf32-i386.c:326 -#, c-format -msgid "%s: invalid relocation type %d" -msgstr "%s: ogiltig omlokaliseringstyp %d" +#: elf32-cris.c:1172 +msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" +msgstr "%B, sektion %A: Varken PLT eller GOT för omlokalisering %s mot symbol ”%s”" -#: elf32-i386.c:841 elf32-s390.c:990 elf32-sparc.c:887 elf32-xtensa.c:637 -#: elf64-s390.c:943 elf64-x86-64.c:650 -#, c-format -msgid "%s: bad symbol index: %d" -msgstr "%s: felaktigt symbolindex: %d" +#: elf32-cris.c:1174 +msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" +msgstr "%B, sektion %A: Ingen PLT för omlokalisering %s mot symbol ”%s”" -#: elf32-i386.c:949 elf32-s390.c:1168 elf32-sh.c:6426 elf32-sparc.c:1011 -#: elf64-s390.c:1129 -#, c-format -msgid "%s: `%s' accessed both as normal and thread local symbol" -msgstr "%s: \"%s\" anropad både som lokal normal symbol och lokal trådsymbol" +#: elf32-cris.c:1180 elf32-cris.c:1313 elf32-cris.c:1573 elf32-cris.c:1656 +#: elf32-cris.c:1809 elf32-tic6x.c:2645 +msgid "[whose name is lost]" +msgstr "[vars namn tappats bort]" -#: elf32-i386.c:1064 elf32-s390.c:1279 elf64-ppc.c:3929 elf64-s390.c:1243 -#: elf64-x86-64.c:886 -#, c-format -msgid "%s: bad relocation section name `%s'" -msgstr "%s: felaktig omlokaliseringssektionsnamn \"%s\"" +#: elf32-cris.c:1299 elf32-tic6x.c:2630 +msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" +msgstr "%B, sektion %A: omlokalisering %s med addend %d som inte är noll mot lokal symbol" -#: elf32-i386.c:2908 elf32-m68k.c:1757 elf32-s390.c:3022 elf32-sparc.c:2879 -#: elf32-xtensa.c:2193 elf64-s390.c:3018 elf64-sparc.c:2664 -#: elf64-x86-64.c:2452 -#, c-format -msgid "%s(%s+0x%lx): unresolvable relocation against symbol `%s'" -msgstr "%s(%s+0x%lx): olöslig omlokalisering mot symbolen \"%s\"" +#: elf32-cris.c:1307 elf32-cris.c:1650 elf32-cris.c:1803 elf32-tic6x.c:2638 +msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" +msgstr "%B, sektion %A: omlokalisering %s med addend %d som inte är noll mot symbol ”%s”" -#: elf32-i386.c:2947 elf32-m68k.c:1796 elf32-s390.c:3072 elf64-s390.c:3068 -#: elf64-x86-64.c:2490 -#, c-format -msgid "%s(%s+0x%lx): reloc against `%s': error %d" -msgstr "%s(%s+0x%lx): omlokalisering mot \"%s\": fel %d" +#: elf32-cris.c:1333 +msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" +msgstr "%B, sektion %A: omlokalisering %s tillÃ¥ts inte för global symbol: ”%s”" -#: elf32-ip2k.c:565 elf32-ip2k.c:571 elf32-ip2k.c:734 elf32-ip2k.c:740 -msgid "ip2k relaxer: switch table without complete matching relocation information." -msgstr "ip2k-relaxerare: switchtabell utan helt matchande omlokaliseringsinformation." +#: elf32-cris.c:1349 +msgid "%B, section %A: relocation %s with no GOT created" +msgstr "%B, sektion %A: omlokalisering %s utan GOT skapades" -#: elf32-ip2k.c:588 elf32-ip2k.c:767 -msgid "ip2k relaxer: switch table header corrupt." -msgstr "ip2k-relaxerare: switchtabellshuvud trasigt." +#. We shouldn't get here for GCC-emitted code. +#: elf32-cris.c:1564 +msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?" +msgstr "%B, sektion %A: omlokalisering %s har en odefinierad referens till ”%s”, kanske en deklarationsblunder?" -#: elf32-ip2k.c:1395 -#, c-format -msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." -msgstr "ip2k-länkare: sidinstruktion saknas vid 0x%08lx (dest = 0x%08lx)." +#: elf32-cris.c:1937 +msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?" +msgstr "%B, sektion %A: omlokalisering %s tillÃ¥ts inte för symbol: ”%s” som definieras utanför programmet, kanske en deklarationsblunder?" -#: elf32-ip2k.c:1409 -#, c-format -msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." -msgstr "ip2k-länkare: redundant sidinstruktion vid 0x%08lx (dest = 0x%08lx)." +#: elf32-cris.c:1990 +msgid "(too many global variables for -fpic: recompile with -fPIC)" +msgstr "(för mÃ¥nga globala variabler för -fpic: kompilera om med -fPIC)" -#. Only if it's not an unresolved symbol. -#: elf32-ip2k.c:1593 -msgid "unsupported relocation between data/insn address spaces" -msgstr "omlokalisering mellan data/-instruktionsadressutrymmen stöds inte" +#: elf32-cris.c:1997 +msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)" +msgstr "(thread-local-data för stor för -fpic eller -msmall-tls: kompilera om med -fPIC eller -mno-small-tls)" -#: elf32-iq2000.c:907 elf32-m68hc1x.c:1431 elf32-ppc.c:2175 elf64-sparc.c:3072 -#: elfxx-mips.c:9195 -#, c-format -msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%s: använder andra e_flags-fält (0x%lx) än tidigare moduler (0x%lx)" +#: elf32-cris.c:3234 +msgid "" +"%B, section %A:\n" +" v10/v32 compatible object %s must not contain a PIC relocation" +msgstr "" +"%B, sektion %A:\n" +" v10/v32-kompatibelt objekt %s fÃ¥r inte innehÃ¥lla en PIC-omlokalisering" -#: elf32-m32r.c:930 -msgid "SDA relocation when _SDA_BASE_ not defined" -msgstr "SDA-omlokalisering då _SDA_BASE_ inte är definierat" +#: elf32-cris.c:3342 +msgid "" +"%B, section %A:\n" +" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC" +msgstr "" +"%B, sektion %A:\n" +" omlokalisering %s ogiltig i ett delat objekt; i regel en flaggmiss, kompilera om med -fPIC" -#: elf32-m32r.c:1018 elf64-alpha.c:4279 elf64-alpha.c:4407 elf32-ia64.c:3958 -#: elf64-ia64.c:3958 -#, c-format -msgid "%s: unknown relocation type %d" -msgstr "%s: okänd omlokaliseringstyp %d" +#: elf32-cris.c:3556 +msgid "" +"%B, section %A:\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" +"%B, sektion %A:\n" +" omlokalisering %s bör inte användas i ett delat objekt; kompilera om med -fPIC" + +#: elf32-cris.c:3978 +msgid "" +"%B, section `%A', to symbol `%s':\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" +"%B, sektion ”%A”, till symbol ”%s”:\n" +" omlokalisering %s bör inte användas i ett delat objekt; kompilera om med -fPIC" + +#: elf32-cris.c:4091 +msgid "Unexpected machine number" +msgstr "Oväntat maskinnummer" -#: elf32-m32r.c:1226 +#: elf32-cris.c:4142 #, c-format -msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" -msgstr "%s: Målet (%s) för en %s-omlokalisering är i fel sektion (%s)" +msgid " [symbols have a _ prefix]" +msgstr " [symboler har ett _-prefix]" -#: elf32-m32r.c:1952 +#: elf32-cris.c:4145 #, c-format -msgid "%s: Instruction set mismatch with previous modules" -msgstr "%s: Instruktionsuppsättning passar inte med tidigare moduler" +msgid " [v10 and v32]" +msgstr " [v10 och v32]" -#: elf32-m32r.c:1975 +#: elf32-cris.c:4148 #, c-format -msgid "private flags = %lx" -msgstr "privata flaggor = %lx" +msgid " [v32]" +msgstr " [v32]" -#: elf32-m32r.c:1980 -msgid ": m32r instructions" -msgstr ": m32r-instruktioner" +#: elf32-cris.c:4191 +msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" +msgstr "%B: använder symboler med _-prefix, men skriver en fil med symboler utan prefix" -#: elf32-m32r.c:1981 -msgid ": m32rx instructions" -msgstr ": m32rx-instruktioner" +#: elf32-cris.c:4192 +msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" +msgstr "%B: använder symboler utan prefix, men skriver en fil med symboler med _-prefix" -#: elf32-m68hc1x.c:1217 -#, c-format -msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" -msgstr "Referens till den avlägsna symbolen \"%s\" med hjälp av en felaktig omlokalisering kan resultera i felaktig exekvering" +#: elf32-cris.c:4211 +msgid "%B contains CRIS v32 code, incompatible with previous objects" +msgstr "%B innehÃ¥ller CRIS v32-kod, inkompatibelt med föregÃ¥ende objekt" -#: elf32-m68hc1x.c:1240 -#, c-format -msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" -msgstr "bankad adress [%lx:%04lx] (%lx) är inte i samma bank som den aktuella bankade adressen [%lx:%04lx] (%lx)" +#: elf32-cris.c:4213 +msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" +msgstr "%B innehÃ¥ller icke-CRIS v32-kod, inkompatibelt med föregÃ¥ende objekt" -#: elf32-m68hc1x.c:1259 +#: elf32-dlx.c:142 #, c-format -msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" -msgstr "referens till en bankad adress [%lx:%04lx] i det normala adressutrymmet vid %04lx" +msgid "BFD Link Error: branch (PC rel16) to section (%s) not supported" +msgstr "BFD-länkningsfel: gren (PC rel16) till sektion (%s) saknar stöd" -#: elf32-m68hc1x.c:1396 +#: elf32-dlx.c:204 #, c-format -msgid "%s: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" -msgstr "%s: länkar filer kompilerade för 16-bitars heltal (-mshort) och andra för 32-bitars heltal" +msgid "BFD Link Error: jump (PC rel26) to section (%s) not supported" +msgstr "BFD-länkningsfel: hopp (PC rel26) till sektion (%s) saknar stöd" -#: elf32-m68hc1x.c:1404 -#, c-format -msgid "%s: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" -msgstr "%s: länkar filer kompilerade för 32-bitars dubbelprecisionsflyttal (-fshort-double) och andra för 64-bitars dubbelprecisionsflyttal" +#. Only if it's not an unresolved symbol. +#: elf32-epiphany.c:564 elf32-ip2k.c:1475 +msgid "unsupported relocation between data/insn address spaces" +msgstr "omlokalisering mellan data/-instruktionsadressutrymmen stöds inte" -#: elf32-m68hc1x.c:1414 -#, c-format -msgid "%s: linking files compiled for HCS12 with others compiled for HC12" -msgstr "%s: länkar filer kompilerade för HCS12 med andra kompilerade för HC12" +#: elf32-frv.c:1460 elf32-frv.c:1609 +msgid "relocation requires zero addend" +msgstr "omlokalisering kräver addend som är noll" -#: elf32-m68hc1x.c:1462 -msgid "[abi=32-bit int, " -msgstr "[abi=32-bitars heltal, " +#: elf32-frv.c:2822 +msgid "%H: relocation to `%s+%v' may have caused the error above\n" +msgstr "%H: omlokalisering till ”%s+%v” kan ha orsakat felet ovan\n" -#: elf32-m68hc1x.c:1464 -msgid "[abi=16-bit int, " -msgstr "[abi=16-bitars heltal, " +#: elf32-frv.c:2839 +msgid "%H: relocation references symbol not defined in the module\n" +msgstr "%H: omlokalisering hänvisar till en symbol som inte definierats i modulen\n" -#: elf32-m68hc1x.c:1467 -msgid "64-bit double, " -msgstr "64-bitars dubbelprecisionsflyttal, " +#: elf32-frv.c:2915 +msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" +msgstr "%H: R_FRV_GETTLSOFF inte tillämpat pÃ¥ en anropsinstruktion\n" -#: elf32-m68hc1x.c:1469 -msgid "32-bit double, " -msgstr "32-bitars dubbelprecisionsflyttal, " +#: elf32-frv.c:2956 +msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" +msgstr "%H: R_FRV_GOTTLSDESC12 inte tillämpad pÃ¥ en lddi-instruktion\n" -#: elf32-m68hc1x.c:1472 -msgid "cpu=HC11]" -msgstr "cpu=HC11]" +#: elf32-frv.c:3027 +msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" +msgstr "%H: R_FRV_GOTTLSDESCHI inte tillämpad pÃ¥ en sethi-instruktion\n" -#: elf32-m68hc1x.c:1474 -msgid "cpu=HCS12]" -msgstr "cpu=HCS12]" +#: elf32-frv.c:3064 +msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" +msgstr "%H: R_FRV_GOTTLSDESCLO inte tillämpad pÃ¥ en setlo- eller setlos-instruktion\n" -#: elf32-m68hc1x.c:1476 -msgid "cpu=HC12]" -msgstr "cpu=HC12]" +#: elf32-frv.c:3111 +msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" +msgstr "%H: R_FRV_TLSDESC_RELAX inte tillämpad pÃ¥ en ldd-instruktion\n" -#: elf32-m68hc1x.c:1479 -msgid " [memory=bank-model]" -msgstr " [memory=bank-modell]" +#: elf32-frv.c:3195 +msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" +msgstr "%H: R_FRV_GETTLSOFF_RELAX inte tillämpad pÃ¥ en calll-instruktion\n" -#: elf32-m68hc1x.c:1481 -msgid " [memory=flat]" -msgstr " [memory=platt]" +#: elf32-frv.c:3249 +msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" +msgstr "%H: R_FRV_GOTTLSOFF12 inte tillämpad pÃ¥ en ldi-instruktion\n" -#: elf32-m68k.c:400 -msgid " [cpu32]" -msgstr " [cpu32]" +#: elf32-frv.c:3279 +msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" +msgstr "%H: R_FRV_GOTTLSOFFHI inte tillämpad pÃ¥ en sethi-instruktion\n" -#: elf32-m68k.c:403 -msgid " [m68000]" -msgstr " [m68000]" +#: elf32-frv.c:3308 +msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" +msgstr "%H: R_FRV_GOTTLSOFFLO inte tillämpad pÃ¥ en setlo eller setlos instruktion\n" -#: elf32-mcore.c:353 elf32-mcore.c:456 -#, c-format -msgid "%s: Relocation %s (%d) is not currently supported.\n" -msgstr "%s: Omlokalisering %s (%d) stöds för närvarande inte.\n" +#: elf32-frv.c:3338 +msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" +msgstr "%H: R_FRV_TLSOFF_RELAX inte tillämpad pÃ¥ en ld-instruktion\n" -#: elf32-mcore.c:441 -#, c-format -msgid "%s: Unknown relocation type %d\n" -msgstr "%s: Okänd omlokaliseringstyp %d\n" +#: elf32-frv.c:3383 +msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" +msgstr "%H: R_FRV_TLSMOFFHI inte tillämpad pÃ¥ en sethi-instruktion\n" -#: elf32-mips.c:1170 elf64-mips.c:1717 elfn32-mips.c:1664 -msgid "32bits gp relative relocation occurs for an external symbol" -msgstr "32-bitars gp-relativ omlokalisering förekom för en extern symbol" +#: elf32-frv.c:3410 +msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" +msgstr "R_FRV_TLSMOFFLO inte tillämpad pÃ¥ en setlo eller setlos instruktion\n" -#: elf32-mips.c:1314 elf64-mips.c:1830 elfn32-mips.c:1783 -#, c-format -msgid "Linking mips16 objects into %s format is not supported" -msgstr "Länkning av mips16-objekt till %s-format stöds inte" +#: elf32-frv.c:3531 +msgid "%H: R_FRV_FUNCDESC references dynamic symbol with nonzero addend\n" +msgstr "%H: R_FRV_FUNCDESC-referenser dynamisk symbol pÃ¥ ett ickenoll addend\n" -#: elf32-ppc.c:2056 -#, c-format -msgid "generic linker can't handle %s" -msgstr "allmän länkare kan inte hantera %s" +#: elf32-frv.c:3572 elf32-frv.c:3694 +msgid "%H: cannot emit fixups in read-only section\n" +msgstr "%H: kan inte sända ut fixar i skrivskyddade sektioner\n" -#: elf32-ppc.c:2138 -#, c-format -msgid "%s: compiled with -mrelocatable and linked with modules compiled normally" -msgstr "%s: kompilerad med -mrelocatable och länkad med moduler som kompilerats normalt" +#: elf32-frv.c:3603 elf32-frv.c:3737 +msgid "%H: cannot emit dynamic relocations in read-only section\n" +msgstr "%H: kan inte sända ut dynamiska omlokaliseringar i skrivskyddad sektion\n" -#: elf32-ppc.c:2147 -#, c-format -msgid "%s: compiled normally and linked with modules compiled with -mrelocatable" -msgstr "%s: kompilerad normalt och länkad med moduler som kompilerats med -mrelocatable" +#: elf32-frv.c:3652 +msgid "%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend\n" +msgstr "%H: R_FRV_FUNCDESC_VALUE hänvisar till dynamisk symbol med icke-noll addend\n" -#: elf32-ppc.c:3413 -#, c-format -msgid "%s: relocation %s cannot be used when making a shared object" -msgstr "%s: omlokaliseringen %s kan inte användas då ett delat objekt skapas" +#: elf32-frv.c:3908 +msgid "%H: reloc against `%s' references a different segment\n" +msgstr "%H: omlokalisering mot ”%s” hänvisar till ett annat segment\n" -#. It does not make sense to have a procedure linkage -#. table entry for a local symbol. -#: elf32-ppc.c:3619 -#, c-format -msgid "%s(%s+0x%lx): %s reloc against local symbol" -msgstr "%s(%s+0x%lx): %s-omlokalisering mot lokal symbol" +#: elf32-frv.c:4058 +msgid "%H: reloc against `%s': %s\n" +msgstr "%H: omlokalisering mot ”%s”: %s\n" -#: elf32-ppc.c:4862 elf64-ppc.c:7789 -#, c-format -msgid "%s: unknown relocation type %d for symbol %s" -msgstr "%s: okänd omlokaliseringstyp %d för symbolen %s" +#: elf32-frv.c:6265 +msgid "%B: unsupported relocation type %i\n" +msgstr "%B: omlokaliseringstyp stöds ej %i\n" -#: elf32-ppc.c:5113 +#: elf32-frv.c:6514 #, c-format -msgid "%s(%s+0x%lx): non-zero addend on %s reloc against `%s'" -msgstr "%s(%s+0x%lx): icke-tomt addendum på %s-omlokalisering mot \"%s\"" +msgid "%s: compiled with %s and linked with modules that use non-pic relocations" +msgstr "%s: kompilerad med %s och länkad med moduler som använder icke-pic-omlokalisering" -#: elf32-ppc.c:5399 elf32-ppc.c:5425 elf32-ppc.c:5484 +#: elf32-frv.c:6567 elf32-iq2000.c:828 elf32-m32c.c:812 #, c-format -msgid "%s: the target (%s) of a %s relocation is in the wrong output section (%s)" -msgstr "%s: målet (%s) för en %s-omlokalisering är i fel utdatasektion (%s)" +msgid "%s: compiled with %s and linked with modules compiled with %s" +msgstr "%s: kompilerad med %s och länkad med moduler som kompilerats med %s" + +#: elf32-frv.c:6579 +#, c-format +msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: använder andra okända e_flags-fält (0x%lx) än tidigare moduler (0x%lx)" + +#: elf32-frv.c:6627 elf32-iq2000.c:865 elf32-m32c.c:848 elf32-mt.c:561 +#: elf32-rl78.c:1069 elf32-rx.c:3040 elf64-ppc.c:5839 +#, c-format +msgid "private flags = 0x%lx:" +msgstr "privata flaggor = 0x%lx:" + +#: elf32-gen.c:69 elf64-gen.c:69 +msgid "%B: Relocations in generic ELF (EM: %d)" +msgstr "%B: omlokaliseringar i vanlig ELF (EM: %d)" + +#: elf32-hppa.c:830 elf32-hppa.c:3592 +msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" +msgstr "%B(%A+0x%lx): kan inte nÃ¥ %s, kompilera om med -ffunction-sections" + +#: elf32-hppa.c:1268 +msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: omlokalisering %s kan inte användas vid skapande av ett delat objekt; kompilera om med -fPIC" + +#: elf32-hppa.c:2781 +msgid "%B: duplicate export stub %s" +msgstr "%B: duplicera exportstubbe %s" + +#: elf32-hppa.c:3427 +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 för insn 0x%x saknar stöd i en icke-delad länk" + +#: elf32-hppa.c:4279 +msgid "%B(%A+0x%lx): cannot handle %s for %s" +msgstr "%B(%A+0x%lx): kan inte hantera %s för %s" + +#: elf32-hppa.c:4598 +msgid ".got section not immediately after .plt section" +msgstr ".got-sektion följer inte omedelbart efter .plt-sektion" + +#. Unknown relocation. +#: elf32-i386.c:380 elf32-m68k.c:353 elf32-ppc.c:2035 elf32-s390.c:345 +#: elf32-tic6x.c:2667 elf64-ppc.c:2427 elf64-s390.c:371 elf64-x86-64.c:281 +msgid "%B: invalid relocation type %d" +msgstr "%B: ogiltig omlokaliseringstyp %d" + +#: elf32-i386.c:1394 elf64-x86-64.c:1410 +msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" +msgstr "%B: TLS-övergÃ¥ng frÃ¥n %s till %s mot ”%s” vid 0x%lx i sektion ”%A” misslyckades" + +#: elf32-i386.c:1642 elf32-s390.c:1233 elf32-sh.c:6263 elf32-tilepro.c:1627 +#: elf32-xtensa.c:1176 elf64-s390.c:1166 elfxx-sparc.c:1596 +#: elfxx-tilegx.c:1836 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "%B: ”%s” Ã¥tkommen som bÃ¥de normal och trÃ¥dlokal symbol" + +#: elf32-i386.c:2500 elf64-x86-64.c:2582 +msgid "%P: %B: warning: relocation against `%s' in readonly section `%A'.\n" +msgstr "%P: %B: varning: omlokalisering mot ”%s” i skrivskyddad sektion ”%A”.\n" + +#: elf32-i386.c:2740 elf64-x86-64.c:2820 +msgid "%P: %B: warning: relocation in readonly section `%A'.\n" +msgstr "%P: %B: varning: omlokalisering i skrivskyddad sektion ”%A”.\n" + +#: elf32-i386.c:3207 elf32-tilepro.c:2873 elf64-x86-64.c:3275 +#: elfxx-tilegx.c:3172 /src/binutils-gdb/bfd/elfnn-aarch64.c:4099 +msgid "%B: unrecognized relocation (0x%x) in section `%A'" +msgstr "%B: okänd omlokalisering (0x%x) i sektion ”%A”" + +#: elf32-i386.c:3368 elf64-x86-64.c:3380 elfxx-sparc.c:3150 +#: /src/binutils-gdb/bfd/elfnn-aarch64.c:3496 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" +msgstr "%B: omlokalisering %s mot STT_GNU_IFUNC-symbolen ”%s” hanteras inte av %s" + +#: elf32-i386.c:3610 elf64-x86-64.c:3777 +msgid "hidden symbol" +msgstr "dold symbol" + +#: elf32-i386.c:3613 elf64-x86-64.c:3780 +msgid "internal symbol" +msgstr "intern symbol" + +#: elf32-i386.c:3616 elf64-x86-64.c:3783 +msgid "protected symbol" +msgstr "skyddad symbol" + +#: elf32-i386.c:3619 elf64-x86-64.c:3786 +msgid "symbol" +msgstr "symbol" + +#: elf32-i386.c:3624 +msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" +msgstr "%B: omlokalisering R_386_GOTOFF mot odefinierad %s ”%s” kan inte användas när ett delat objekt skapas" + +#: elf32-i386.c:3635 +msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" +msgstr "%B: omlokalisering R_386_GOTOFF mot skyddad funktion ”%s” kan inte användas när ett delat objekt skapas" + +#: elf32-i386.c:4923 elf32-tilepro.c:3923 elf64-x86-64.c:4964 +#: elfxx-tilegx.c:4326 /src/binutils-gdb/bfd/elfnn-aarch64.c:7105 +#, c-format +msgid "discarded output section: `%A'" +msgstr "kastade utdata-sektion: ”%A”" + +#: elf32-ip2k.c:857 elf32-ip2k.c:863 elf32-ip2k.c:930 elf32-ip2k.c:936 +msgid "ip2k relaxer: switch table without complete matching relocation information." +msgstr "ip2k-relaxer: switchtabell utan helt matchande omlokaliseringsinformation." + +#: elf32-ip2k.c:880 elf32-ip2k.c:963 +msgid "ip2k relaxer: switch table header corrupt." +msgstr "ip2k-relaxer: switch-tabellshuvud trasigt." + +#: elf32-ip2k.c:1292 +#, c-format +msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k-länkare: sidinstruktion saknas vid 0x%08lx (dest = 0x%08lx)." + +#: elf32-ip2k.c:1308 +#, c-format +msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k-länkare: överflödig sidinstruktion vid 0x%08lx (dest = 0x%08lx)." + +#: elf32-iq2000.c:841 elf32-m32c.c:824 +#, c-format +msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: använder andra e_flags-fält (0x%lx) än tidigare moduler (0x%lx)" + +#: elf32-lm32.c:698 elf32-nios2.c:2191 +msgid "global pointer relative relocation when _gp not defined" +msgstr "global pekarrelativ omlokalisering när _gp inte definierades" + +#: elf32-lm32.c:753 elf32-nios2.c:2623 +msgid "global pointer relative address out of range" +msgstr "global pekarrelativ adress utanför intervall" + +#: elf32-lm32.c:1049 +msgid "internal error: addend should be zero for R_LM32_16_GOT" +msgstr "internt fel: addend bör vara noll för R_LM32_16_GOT" + +#: elf32-m32r.c:1453 +msgid "SDA relocation when _SDA_BASE_ not defined" +msgstr "SDA-omlokalisering dÃ¥ _SDA_BASE_ inte är definierat" + +#: elf32-m32r.c:3003 +msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" +msgstr "%B: Destinationen (%s) för en %s-omlokalisering är i fel sektion (%A)" + +#: elf32-m32r.c:3529 +msgid "%B: Instruction set mismatch with previous modules" +msgstr "%B: Instruktionsuppsättningen stämmer inte överens med föregÃ¥ende moduler" + +#: elf32-m32r.c:3550 elf32-nds32.c:5636 +#, c-format +msgid "private flags = %lx" +msgstr "privata flaggor = %lx" + +#: elf32-m32r.c:3555 +#, c-format +msgid ": m32r instructions" +msgstr ": m32r-instruktioner" + +#: elf32-m32r.c:3556 +#, c-format +msgid ": m32rx instructions" +msgstr ": m32rx-instruktioner" + +#: elf32-m32r.c:3557 +#, c-format +msgid ": m32r2 instructions" +msgstr ": m32r2-instruktioner" + +#: elf32-m68hc1x.c:1114 +#, c-format +msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" +msgstr "Referens till den avlägsna symbolen ”%s” med hjälp av en felaktig omlokalisering kan resultera i felaktig exekvering" + +#: elf32-m68hc1x.c:1150 +#, c-format +msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." +msgstr "XGATE-adress (%lx) är inte inom delat RAM(0xE000-0xFFFF), därför mÃ¥ste du manuellt förskjuta adressen och möjligtvis hantera sidan i din kod." + +#: elf32-m68hc1x.c:1170 +#, c-format +msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" +msgstr "bankad adress [%lx:%04lx] (%lx) är inte i samma bank som den aktuella bankade adressen [%lx:%04lx] (%lx)" + +#: elf32-m68hc1x.c:1190 +#, c-format +msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" +msgstr "referens till en banked-adress [%lx:%04lx] i det normala adressutrymmet vid %04lx" + +#: elf32-m68hc1x.c:1237 +#, c-format +msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" +msgstr "S12-adress (%lx) är inte inom delat RAM(0x2000-0x4000), därför mÃ¥ste du manuellt förskjuta adressen i din kod" + +#: elf32-m68hc1x.c:1370 +msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" +msgstr "%B: länkar filer kompilerade för 16-bitars heltal (-mshort) och andra för 32-bitars heltal" + +#: elf32-m68hc1x.c:1377 +msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" +msgstr "%B: länkar filer kompilerade för 32-bitars dubbelprecision (-fshort-double) och andra för 64-bitars dubbelprecision" + +#: elf32-m68hc1x.c:1386 +msgid "%B: linking files compiled for HCS12 with others compiled for HC12" +msgstr "%B: länkar filer kompilerade för HCS12 med andra kompilerade för HC12" + +#: elf32-m68hc1x.c:1402 elf32-ppc.c:4776 elf64-sparc.c:706 elfxx-mips.c:14817 +msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%B: använder andra e_flags-fält (0x%lx) än föregÃ¥ende moduler (0x%lx)" + +#: elf32-m68hc1x.c:1430 elf32-xgate.c:677 +#, c-format +msgid "[abi=32-bit int, " +msgstr "[abi=32-bitars heltal, " + +#: elf32-m68hc1x.c:1432 elf32-xgate.c:679 +#, c-format +msgid "[abi=16-bit int, " +msgstr "[abi=16-bitars heltal, " + +#: elf32-m68hc1x.c:1435 elf32-xgate.c:682 +#, c-format +msgid "64-bit double, " +msgstr "64-bitars dubbelprecisionsflyttal, " + +#: elf32-m68hc1x.c:1437 elf32-xgate.c:684 +#, c-format +msgid "32-bit double, " +msgstr "32-bitars dubbelprecisionsflyttal, " + +#: elf32-m68hc1x.c:1440 +#, c-format +msgid "cpu=HC11]" +msgstr "cpu=HC11]" + +#: elf32-m68hc1x.c:1442 +#, c-format +msgid "cpu=HCS12]" +msgstr "cpu=HCS12]" + +#: elf32-m68hc1x.c:1444 +#, c-format +msgid "cpu=HC12]" +msgstr "cpu=HC12]" + +#: elf32-m68hc1x.c:1447 +#, c-format +msgid " [memory=bank-model]" +msgstr " [minne=bank-modell]" + +#: elf32-m68hc1x.c:1449 +#, c-format +msgid " [memory=flat]" +msgstr " [minne=platt]" + +#: elf32-m68hc1x.c:1452 +#, c-format +msgid " [XGATE RAM offsetting]" +msgstr " [XGATE RAM-förskjutning]" + +#: elf32-m68k.c:1210 elf32-m68k.c:1211 vms-alpha.c:7207 vms-alpha.c:7222 +msgid "unknown" +msgstr "okänd" + +#: elf32-m68k.c:1674 +msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d" +msgstr "%B: GOT överbelastades: Antal omlokaliseringar med 8-bitars förskjutning > %d" + +#: elf32-m68k.c:1680 +msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d" +msgstr "%B: GOT överbelastades: Antal omlokaliseringar med 8- eller 16-bitars förskjutning > %d" + +#: elf32-m68k.c:3921 +msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): omlokalisering R_68K_TLS_LE32 tillÃ¥ts inte i ett delat objekt" + +#: elf32-mcore.c:99 elf32-mcore.c:442 +msgid "%B: Relocation %s (%d) is not currently supported.\n" +msgstr "%B: omlokalisering %s (%d) saknar för närvarande stöd.\n" + +#: elf32-mcore.c:428 +msgid "%B: Unknown relocation type %d\n" +msgstr "%B: Okänd omlokaliseringstyp %d\n" + +#. Pacify gcc -Wall. +#: elf32-mep.c:157 +#, c-format +msgid "mep: no reloc for code %d" +msgstr "mep: ingen omlokalisering för kod %d" + +#: elf32-mep.c:163 +#, c-format +msgid "MeP: howto %d has type %d" +msgstr "MeP: howto %d har typen %d" + +#: elf32-mep.c:632 +msgid "%B and %B are for different cores" +msgstr "%B och %B är för olika kärnor" + +#: elf32-mep.c:649 +msgid "%B and %B are for different configurations" +msgstr "%B och %B är för olika konfigurationer" + +#: elf32-mep.c:686 +#, c-format +msgid "private flags = 0x%lx" +msgstr "privata flaggor = 0x%lx" + +#: elf32-metag.c:1921 +msgid "%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC-omlokalisering inte tillÃ¥tet i delat objekt" + +#: elf32-microblaze.c:950 +#, c-format +msgid "%s: unknown relocation type %d" +msgstr "%s: okänd omlokaliseringstyp %d" + +#: elf32-microblaze.c:1076 elf32-microblaze.c:1121 +#, c-format +msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" +msgstr "%s: MÃ¥let (%s) för en %s-omlokalisering är i fel sektion (%s)" + +#: elf32-microblaze.c:1484 elf32-tilepro.c:3320 elfxx-sparc.c:3526 +#: elfxx-tilegx.c:3729 +msgid "%B: probably compiled without -fPIC?" +msgstr "%B: antagligen kompilerad utan -fPIC?" + +#: elf32-mips.c:1670 elf64-mips.c:2990 elfn32-mips.c:2793 +msgid "literal relocation occurs for an external symbol" +msgstr "bokstavstrogen omlokalisering utförs för en extern symbol" + +#: elf32-mips.c:1717 elf32-score.c:570 elf32-score7.c:469 elf64-mips.c:3033 +#: elfn32-mips.c:2834 +msgid "32bits gp relative relocation occurs for an external symbol" +msgstr "32-bitars gp-relativ omlokalisering förekom för en extern symbol" + +#: elf32-msp430.c:801 elf32-msp430.c:1109 +msgid "Try enabling relaxation to avoid relocation truncations" +msgstr "Försökte aktivera relax för att undvika omlokaliseringstrunkeringar" + +#: elf32-msp430.c:1317 +msgid "internal error: branch/jump to an odd address detected" +msgstr "interna fel: grena/hoppa till en udda upptäckt adress" + +#: elf32-msp430.c:2221 +msgid "Warning: %B: Unknown MSPABI object attribute %d" +msgstr "Varning: %B: Okänt MSPABI-objektattribut %d" + +#: elf32-msp430.c:2312 +msgid "error: %B uses %s instructions but %B uses %s" +msgstr "fel: %B använder %s-instruktioner men %B använder %s" + +#: elf32-msp430.c:2324 +msgid "error: %B uses the %s code model whereas %B uses the %s code model" +msgstr "fel: %B använder %s-kodmodell men %B använder %s-kodmodell" + +#: elf32-msp430.c:2336 +msgid "error: %B uses the large code model but %B uses MSP430 instructions" +msgstr "fel: %B använder den stora kodmodellen men %B använder MSP430-instruktioner" + +#: elf32-msp430.c:2346 +msgid "error: %B uses the %s data model whereas %B uses the %s data model" +msgstr "fel: %B använder %s-datamodellen men %B använder %s-datamodellen" + +#: elf32-msp430.c:2358 +msgid "error: %B uses the small code model but %B uses the %s data model" +msgstr "fel: %B använder den mindre kodmodellen men %B använder %s-datamodellen" + +#: elf32-msp430.c:2369 +msgid "error: %B uses the %s data model but %B only uses MSP430 instructions" +msgstr "fel: %B använder %s-datamodellen men %B använder MSP430-instruktioner" + +#: elf32-nds32.c:2921 +msgid "error: Can't find symbol: _SDA_BASE_." +msgstr "fel: kan inte hitta symbol: _SDA_BASE_." + +#: elf32-nds32.c:4142 +msgid "%B: error: unknown relocation type %d." +msgstr "%B-fel: okänd omlokaliseringstyp %d." + +#: elf32-nds32.c:4584 +#, c-format +msgid "%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared mode." +msgstr "%s: varning: kan inte hantera R_NDS32_25_ABS_RELA i delat läge." + +#: elf32-nds32.c:4716 +msgid "%B: warning: unaligned access to GOT entry." +msgstr "%B: varning: ojusterad Ã¥tkomst till GOT-post." + +#: elf32-nds32.c:4758 +msgid "%B: warning: relocate SDA_BASE failed." +msgstr "%B: varning: omlokalisering av SDA_BASE-misslyckades." + +#: elf32-nds32.c:4779 +msgid "%B(%A): warning: unaligned small data access of type %d." +msgstr "%B(%A): varning: ojusterad mindre dataÃ¥tkomst för typen %d." + +#: elf32-nds32.c:5446 +msgid "%B: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" +msgstr "%B: ISR-vektorstorlek stämmer inte överens med tidigare moduler, föregÃ¥ende %u-byte, aktuell %u-byte" + +#: elf32-nds32.c:5489 +msgid "%B: warning: Endian mismatch with previous modules." +msgstr "%B: varning: byteordning stämmer inte med tidigare moduler." + +#: elf32-nds32.c:5499 +msgid "%B: warning: Older version of object file encountered, Please recompile with current tool chain." +msgstr "%B: varning: Äldre versioner av objektfiler pÃ¥träffat. Kompilera om med aktuell verktygskedja." + +#: elf32-nds32.c:5577 +msgid "%B: error: ABI mismatch with previous modules." +msgstr "%B: fel: ABI-mismatch med tidigare moduler." + +#: elf32-nds32.c:5588 +msgid "%B: error: Instruction set mismatch with previous modules." +msgstr "%B: fel: Instruktionsuppsättning stämmer inte med tidigare moduler." + +#: elf32-nds32.c:5612 +msgid "%B: warning: Incompatible elf-versions %s and %s." +msgstr "%B: varning: Inkompatibla elf-versioner %s och %s." + +#: elf32-nds32.c:5642 +#, c-format +msgid ": n1 instructions" +msgstr ": n1-instruktioner" + +#: elf32-nds32.c:5645 +#, c-format +msgid ": n1h instructions" +msgstr ": n1h-instruktioner" + +#: elf32-nds32.c:8147 +msgid "%B: %s\n" +msgstr "%B: %s\n" + +#: elf32-nds32.c:8449 +msgid "%B(%A): warning: relax is suppressed for sections of alignment %d-bytes > 4-byte." +msgstr "%B(%A): varning: relax är undertryckt för sektioner med justering %d-byte > 4-byte." + +#: elf32-nds32.c:8502 +msgid "%B: error: Cannot set _ITB_BASE_" +msgstr "%B: fel: Kan inte sätta _ITB_BASE_" + +#: elf32-nds32.c:11384 +msgid "%B: Nested OMIT_FP in %A." +msgstr "%B: Nästlade OMIT_FP i %A." + +#: elf32-nds32.c:11401 +msgid "%B: Unmatched OMIT_FP in %A." +msgstr "%B: Omatchade OMIT_FP i %A." + +#: elf32-nds32.c:13357 +msgid "Linker: cannot init ex9 hash table error \n" +msgstr "Länkare: kan inte initiera ex9-hashtabellfel \n" + +#: elf32-nds32.c:13790 elf32-nds32.c:13804 +msgid "Linker: error cannot fixed ex9 relocation \n" +msgstr "Länkare: kan inte fixa ex9-omlokalisering \n" + +#: elf32-nds32.c:14015 +#, c-format +msgid "%s: warning: unaligned small data access. For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x." +msgstr "%s: varning: ojusterad liten dataÃ¥tkomst. För post: {%d, %d, %d}, adr = 0x%x, just = 0x%x." + +#: elf32-nds32.c:14047 +msgid "%P%F: failed creating ex9.it %s hash table: %E\n" +msgstr "%P%F: misslyckades skapa ex9.it %s hashtabell: %E\n" + +#: elf32-nios2.c:2861 +#, c-format +msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n" +msgstr "global pekarrelativ omlokalisering pÃ¥ adress 0x%08x när _gp inte är definierad\n" + +#: elf32-nios2.c:2878 +#, c-format +msgid "Unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767.\n" +msgstr "Kunde inte nÃ¥ %s (pÃ¥ 0x%08x) frÃ¥n den globala pekaren (pÃ¥ 0x%08x) eftersom förskjutningen (%d) är utanför det tillÃ¥tna intervallet, -32678 till 32767.\n" + +#: elf32-nios2.c:3392 +msgid "%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_NIOS2_TLS_LE16-omlokalisering inte tillÃ¥tet i ett delat objekt" + +#: elf32-nios2.c:3520 +msgid "relocation out of range" +msgstr "omlokalisering utanför intervallet" + +#: elf32-nios2.c:3530 elf32-tic6x.c:2744 +msgid "dangerous relocation" +msgstr "riskabel omlokalisering" + +#: elf32-nios2.c:4529 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "dynamisk variabel ”%s” är av storlek noll" + +#: elf32-ppc.c:2100 +#, c-format +msgid "generic linker can't handle %s" +msgstr "allmän länkare kan inte hantera %s" + +#: elf32-ppc.c:2642 +msgid "corrupt %s section in %B" +msgstr "korrupt %s-sektion i %B" + +#: elf32-ppc.c:2661 +msgid "unable to read in %s section from %B" +msgstr "kunde inte läsa i sektionen %s frÃ¥n %B" + +#: elf32-ppc.c:2702 +msgid "warning: unable to set size of %s section in %B" +msgstr "varning: kunde inte ange storlek för sektionen %s i %B" + +#: elf32-ppc.c:2752 +msgid "failed to allocate space for new APUinfo section." +msgstr "misslyckades med att allokera utrymme för nytt APUinfo-sektion." + +#: elf32-ppc.c:2771 +msgid "failed to compute new APUinfo section." +msgstr "misslyckades med att beräkna nytt APUinfo-sektion." + +#: elf32-ppc.c:2774 +msgid "failed to install new APUinfo section." +msgstr "misslyckades med att installera nytt APUinfo-sektion." + +#: elf32-ppc.c:3844 +msgid "%B: relocation %s cannot be used when making a shared object" +msgstr "%B: omlokalisering %s kan inte användas när ett delat objekt skapas" + +#. It does not make sense to have a procedure linkage +#. table entry for a local symbol. +#: elf32-ppc.c:4218 +msgid "%P: %H: %s reloc against local symbol\n" +msgstr "%P: %H: %s-omlokalisering mot lokala symboler\n" + +#: elf32-ppc.c:4299 +msgid "%P: %H: @local call to ifunc %s\n" +msgstr "%P: %H: @local till ifunc %s\n" + +#: elf32-ppc.c:4588 elf32-ppc.c:4603 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "Varning. %B använder hÃ¥rt flyttal, %B använder mjukt flyttal" + +#: elf32-ppc.c:4591 elf32-ppc.c:4595 +msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" +msgstr "Varning: %B använder hÃ¥rt flyttal med dubbelprecision, %B använder hÃ¥rt flyttal med enkel precision" + +#: elf32-ppc.c:4599 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "Varning: %B använder mjuka flyttal, %B använder hÃ¥rda flyttal med enkelprecision" + +#: elf32-ppc.c:4606 elf32-ppc.c:4610 +msgid "Warning: %B uses unknown floating point ABI %d" +msgstr "Varning: %B använder okänt flyttals-ABI %d" + +#: elf32-ppc.c:4652 elf32-ppc.c:4656 +msgid "Warning: %B uses unknown vector ABI %d" +msgstr "Varning: %B använder okänd vektor-ABI %d" + +#: elf32-ppc.c:4660 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +msgstr "Varning: %B använder vektor-ABI ”%s”, %B använder ”%s”" + +#: elf32-ppc.c:4677 elf32-ppc.c:4680 +msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory" +msgstr "Varning: %B använder r3/r4 för smÃ¥ struktur-returneringar, %B använder minnet" + +#: elf32-ppc.c:4683 elf32-ppc.c:4687 +msgid "Warning: %B uses unknown small structure return convention %d" +msgstr "Varning: %B använder okänd konvention %d för smÃ¥ strukturers returer" + +#: elf32-ppc.c:4741 +msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" +msgstr "%B: kompilerades med -mrelocatable och länkades med moduler som kompilerats normalt" + +#: elf32-ppc.c:4749 +msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" +msgstr "%B: kompilerades normalt och länkades med moduler som kompilerades med -mrelocatable" + +#: elf32-ppc.c:4872 +msgid "%P: bss-plt forced due to %B\n" +msgstr "%P: bss-plt tvingade till %B\n" + +#: elf32-ppc.c:4875 +msgid "%P: bss-plt forced by profiling\n" +msgstr "%P: bss-plt tvingade genom profilering\n" + +#. 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 optimization. +#: elf32-ppc.c:5369 elf64-ppc.c:8371 +msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" +msgstr "%H arg försvunnet __tls_get_addr, TLS-optimering inaktiverad\n" + +#: elf32-ppc.c:7927 +msgid "%P: %B: unknown relocation type %d for symbol %s\n" +msgstr "%P: %B: okänd omlokaliseringstyp %d för symbolen %s\n" + +#: elf32-ppc.c:8191 +msgid "%P: %H: non-zero addend on %s reloc against `%s'\n" +msgstr "%P: %H: ej-noll addend pÃ¥ %s omlokalisering mot ”%s”\n" + +#: elf32-ppc.c:8389 +msgid "%P: %H: relocation %s for indirect function %s unsupported\n" +msgstr "%P: %H: omlokalisering %s för indirekta funktionen %s stöddes ej\n" + +#: elf32-ppc.c:8646 elf32-ppc.c:8676 elf32-ppc.c:8767 +msgid "%P: %B: the target (%s) of a %s relocation is in the wrong output section (%s)\n" +msgstr "%P %B: destinationen (%s) av %s för omlokaliseringen är i fel utdata-sektion (%s)\n" + +#: elf32-ppc.c:8854 +msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" +msgstr "%B: destinationen (%s) för omlokaliseringen %s är i fel utdata-sektion (%s)" + +#: elf32-ppc.c:8958 +msgid "%P: %B: relocation %s is not yet supported for symbol %s\n" +msgstr "%P: %B: omlokalisering %s stöds ej för symbolen %s\n" + +#: elf32-ppc.c:9038 +msgid "%P: %H: error: %s against `%s' not a multiple of %u\n" +msgstr "%P: %H: fel: %s mot ”%s” är inte en multipel av %u\n" + +#: elf32-ppc.c:9067 +msgid "%P: %H: unresolvable %s relocation against symbol `%s'\n" +msgstr "%P: %H: olösbar %s-omlokalisering till symbolen ”%s”\n" + +#: elf32-ppc.c:9114 +msgid "%P: %H: %s reloc against `%s': error %d\n" +msgstr "%P: %H: %s omlokalisering till ”%s”: fel %d\n" + +#: elf32-ppc.c:9750 +msgid "%P: %s not defined in linker created %s\n" +msgstr "%P: %s är inte definierat i länkaren skapad %s\n" + +#: elf32-rl78.c:784 +msgid "Warning: RL78_SYM reloc with an unknown symbol" +msgstr "Varning: RL78_SYM-omlokalisering med en okänd symbol" + +#: elf32-rl78.c:952 elf32-rx.c:1324 +msgid "%B(%A): error: call to undefined function '%s'" +msgstr "%B(%A): fel: anrop till odefinierad funktion ”%s”" + +#: elf32-rl78.c:966 elf32-rx.c:1338 +msgid "%B(%A): warning: unaligned access to symbol '%s' in the small data area" +msgstr "%B(%A): varning: ojusterad Ã¥tkomst till symbol ”%s” i mindre dataomrÃ¥det" + +#: elf32-rl78.c:970 elf32-rx.c:1342 +msgid "%B(%A): internal error: out of range error" +msgstr "%B(%A): internt fel: utanför intervall" + +#: elf32-rl78.c:974 elf32-rx.c:1346 +msgid "%B(%A): internal error: unsupported relocation error" +msgstr "%B(%A): internt fel: omlokalisering saknar stöd" + +#: elf32-rl78.c:978 elf32-rx.c:1350 +msgid "%B(%A): internal error: dangerous relocation" +msgstr "%B(%A): internt fel: riskabel omlokalisering" + +#: elf32-rl78.c:982 elf32-rx.c:1354 +msgid "%B(%A): internal error: unknown error" +msgstr "%B(%A): internt fel: okänt fel" + +#: elf32-rl78.c:1043 +msgid "RL78/G10 ABI conflict: cannot link G10 and non-G10 objects together" +msgstr "RL78/G10 ABI-konflikt: kan inte länka samman G10 och icke-G10 objekt" + +#: elf32-rl78.c:1046 elf32-rl78.c:1049 +#, c-format +msgid "- %s is G10, %s is not" +msgstr "- %s är G10, %s är det ej" + +#: elf32-rl78.c:1072 +#, c-format +msgid " [G10]" +msgstr " [G10]" + +#: elf32-rx.c:563 +msgid "%B:%A: Warning: deprecated Red Hat reloc " +msgstr "%B:%A: Varning: förÃ¥ldrad Red Hat-omlokalisering " + +#. Check for unsafe relocs in PID mode. These are any relocs where +#. an absolute address is being computed. There are special cases +#. for relocs against symbols that are known to be referenced in +#. crt0.o before the PID base address register has been initialised. +#: elf32-rx.c:581 +msgid "%B(%A): unsafe PID relocation %s at 0x%08lx (against %s in %s)" +msgstr "%B(%A): osäker PID-omlokalisering %s vid 0x%08lx (mot %s i %s)" + +#: elf32-rx.c:1157 +msgid "Warning: RX_SYM reloc with an unknown symbol" +msgstr "Varning: RX_SYM-omlokalisering med en okänd symbol" + +#: elf32-s390.c:2292 elf64-s390.c:2244 +msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" +msgstr "%B(%A+0x%lx): ogiltig instruktion för TLS-omlokalisering %s" + +#: elf32-score.c:1520 elf32-score7.c:1379 elfxx-mips.c:3642 +msgid "not enough GOT space for local GOT entries" +msgstr "inte tillräckligt med GOT-utrymme för lokala GOT-poster" + +#: elf32-score.c:2742 +msgid "address not word align" +msgstr "adressen inte ordjusterad" + +#: elf32-score.c:2827 elf32-score7.c:2631 +#, c-format +msgid "%s: Malformed reloc detected for section %s" +msgstr "%s: Felaktig omlokalisering för sektion %s upptäckt" + +#: elf32-score.c:2882 elf32-score7.c:2686 +msgid "%B: CALL15 reloc at 0x%lx not against global symbol" +msgstr "%B: CALL15-omlokalisering vid 0x%lx inte mot global symbol" + +#: elf32-score.c:4007 elf32-score7.c:3811 +#, c-format +msgid " [pic]" +msgstr " [pic]" + +#: elf32-score.c:4011 elf32-score7.c:3815 +#, c-format +msgid " [fix dep]" +msgstr " [fix dep]" + +#: elf32-score.c:4053 elf32-score7.c:3857 +msgid "%B: warning: linking PIC files with non-PIC files" +msgstr "%B: varning: länkar PIC-filer med icke-PIC-filer" + +#: elf32-sh-symbian.c:130 +msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +msgstr "%B: IMPORT AS-direktiv för %s döljer föregÃ¥ende IMPORT AS" + +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" +msgstr "%B: Okänt .directive-kommando: %s" + +#: elf32-sh-symbian.c:500 +msgid "%B: Failed to add renamed symbol %s" +msgstr "%B: Kunde inte lägga till namnändrad symbol %s" + +#: elf32-sh.c:569 +msgid "%B: 0x%lx: warning: bad R_SH_USES offset" +msgstr "%B: 0x%lx: varning: felaktig R_SH_USES-förskjutning" + +#: elf32-sh.c:581 +msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" +msgstr "%B: 0x%lx: varning: R_SH_USES pekar pÃ¥ okänd insn 0x%x" + +#: elf32-sh.c:598 +msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" +msgstr "%B: 0x%lx: varning: felaktig R_SH_USES-laddningsförskjutning" + +#: elf32-sh.c:613 +msgid "%B: 0x%lx: warning: could not find expected reloc" +msgstr "%B: 0x%lx: varning: kunde inte hitta förväntad omlokalisering" + +#: elf32-sh.c:641 +msgid "%B: 0x%lx: warning: symbol in unexpected section" +msgstr "%B: 0x%lx: varning: symbol i oväntad sektion" + +#: elf32-sh.c:767 +msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" +msgstr "%B: 0x%lx: varning: kunde inte hitta förväntad COUNT-omlokalisering" + +#: elf32-sh.c:776 +msgid "%B: 0x%lx: warning: bad count" +msgstr "%B: 0x%lx: varning: felaktigt antal" + +#: elf32-sh.c:1180 elf32-sh.c:1550 +msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" +msgstr "%B: 0x%lx: ödesdigert: omlokalisering överbelastad vid relax" + +#: elf32-sh.c:3939 elf64-sh64.c:1514 +msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" +msgstr "Oväntat STO_SH5_ISA32 pÃ¥ lokal symbol hanteras inte" + +#: elf32-sh.c:4190 +msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" +msgstr "%B: 0x%lx: ödesdigert: ojusterad grendestination för relax-stödd omlokalisering" + +#: elf32-sh.c:4223 elf32-sh.c:4238 +msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" +msgstr "%B: 0x%lx: ödesdigert: ojusterad %s-omlokalisering 0x%lx" + +#: elf32-sh.c:4252 +msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" +msgstr "%B: 0x%lx: ödesdigert: R_SH_PSHA-omlokalisering %d inte i intervallet -32..32" + +#: elf32-sh.c:4266 +msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" +msgstr "%B: 0x%lx: ödesdigert: R_SH_PSHL-omlokalisering %d inte i intervallet -32..32" + +#: elf32-sh.c:4410 elf32-sh.c:4886 +msgid "%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section" +msgstr "%B(%A+0x%lx): kan inte skicka fix till ”%s” i en skrivskyddad sektion" + +#: elf32-sh.c:4993 +msgid "%B(%A+0x%lx): %s relocation against external symbol \"%s\"" +msgstr "%B(%A+0x%lx): %s-omlokalisering mot extern symbol ”%s”" + +#: elf32-sh.c:5466 +#, c-format +msgid "%X%C: relocation to \"%s\" references a different segment\n" +msgstr "%X%C: omlokalisering till ”%s” använder ett annat segment\n" + +#: elf32-sh.c:5472 +#, c-format +msgid "%C: warning: relocation to \"%s\" references a different segment\n" +msgstr "%C: varning: omlokalisering till ”%s” använder ett annat segment\n" + +#: elf32-sh.c:6254 elf32-sh.c:6337 +msgid "%B: `%s' accessed both as normal and FDPIC symbol" +msgstr "%B: ”%s” Ã¥tkommen bÃ¥de som normal och FDPIC-symbol" + +#: elf32-sh.c:6259 elf32-sh.c:6341 +msgid "%B: `%s' accessed both as FDPIC and thread local symbol" +msgstr "%B: ”%s” Ã¥tkommen bÃ¥de som FDPIC- och trÃ¥dlokal symbol" + +#: elf32-sh.c:6289 +msgid "%B: Function descriptor relocation with non-zero addend" +msgstr "%B: Funktionsbeskrivningsomlokalisering med addend som inte är noll" + +#: elf32-sh.c:6525 elf64-alpha.c:4661 +msgid "%B: TLS local exec code cannot be linked into shared objects" +msgstr "%B: TLS-lokal körkod kan inte länkas till delade objekt" + +#: elf32-sh64.c:224 elf64-sh64.c:2318 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" +msgstr "%s: kompilerat som 32-bitarsobjekt och %s är 64-bitars" + +#: elf32-sh64.c:227 elf64-sh64.c:2321 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" +msgstr "%s: kompilerat som 64-bitarsobjekt och %s är 32-bitars" + +#: elf32-sh64.c:229 elf64-sh64.c:2323 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "%s: objektstorleken stämmer inte överens med den hos mÃ¥let %s" + +#: elf32-sh64.c:452 elf64-sh64.c:2839 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "%s: pÃ¥träffade dataetikettssymbol i indata" + +#: elf32-sh64.c:529 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "PTB passar inte: en SHmedia-adress (bit 0 == 1)" + +#: elf32-sh64.c:532 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "PTA passar inte: en SHcompact-adress (bit 0 == 0)" + +#: elf32-sh64.c:550 +#, c-format +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "%s: GAS-fel: oväntad PTB-instruktion med R_SH_PT_16" + +#: elf32-sh64.c:599 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "%B: fel: ojusterad omlokaliseringstyp %d vid %08x omlokalisering %p\n" + +#: elf32-sh64.c:675 +#, c-format +msgid "%s: could not write out added .cranges entries" +msgstr "%s: kunde inte skriva ut tillagda .cranges-poster" + +#: elf32-sh64.c:735 +#, c-format +msgid "%s: could not write out sorted .cranges entries" +msgstr "%s: kunde inte skriva ut sorterade cranges-poster" + +#: elf32-sparc.c:90 +msgid "%B: compiled for a 64 bit system and target is 32 bit" +msgstr "%B: kompilerad för ett 64-bitars system medan destinationen är 32-bitar" + +#: elf32-sparc.c:103 +msgid "%B: linking little endian files with big endian files" +msgstr "%B: länkar filer med omvänd byteordning med rak byteordning" + +#: elf32-spu.c:716 +msgid "%X%P: overlay section %A does not start on a cache line.\n" +msgstr "%X%P: överläggssektion %A börjar inte pÃ¥ en cache-rad.\n" + +#: elf32-spu.c:724 +msgid "%X%P: overlay section %A is larger than a cache line.\n" +msgstr "%X%P: överläggssektion %A är större än en cache-rad.\n" + +#: elf32-spu.c:744 +msgid "%X%P: overlay section %A is not in cache area.\n" +msgstr "%X%P: överläggssektion %A finns inte i cache-omrÃ¥det.\n" + +#: elf32-spu.c:784 +msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" +msgstr "%X%P: överläggssektionen %A och %A börjar inte pÃ¥ samma adress.\n" + +#: elf32-spu.c:1008 +msgid "warning: call to non-function symbol %s defined in %B" +msgstr "varning: anrop till icke-funktionssymbolen %s definierat i %B" + +#: elf32-spu.c:1358 +msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" +msgstr "%A: 0x%v lrlive .brinfo (%u) skiljer sig frÃ¥n analys (%u)\n" + +#: elf32-spu.c:1877 +msgid "%B is not allowed to define %s" +msgstr "%B har inte tillstÃ¥nd att definiera %s" + +#: elf32-spu.c:1885 +#, c-format +msgid "you are not allowed to define %s in a script" +msgstr "du har inte tillstÃ¥nd att definiera %s i ett skript" + +#: elf32-spu.c:1919 +#, c-format +msgid "%s in overlay section" +msgstr "%s i överläggssektion" + +#: elf32-spu.c:1948 +msgid "overlay stub relocation overflow" +msgstr "omlokalisering för överläggsstubbe spillde över" + +#: elf32-spu.c:1957 +msgid "stubs don't match calculated size" +msgstr "stubbar stämmer inte överens med beräknad storlek" + +#: elf32-spu.c:2539 +#, c-format +msgid "warning: %s overlaps %s\n" +msgstr "varning: %s överlappar %s\n" + +#: elf32-spu.c:2555 +#, c-format +msgid "warning: %s exceeds section size\n" +msgstr "varning: %s överstiger sektionens storlek\n" + +#: elf32-spu.c:2586 +msgid "%A:0x%v not found in function table\n" +msgstr "%A:0x%v hittades inte i funktionstabellen\n" + +#: elf32-spu.c:2726 +msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" +msgstr "%B(%A+0x%v): anrop till icke-kodsektion %B(%A), analys inte slutförd\n" + +#: elf32-spu.c:3294 +#, c-format +msgid "Stack analysis will ignore the call from %s to %s\n" +msgstr "Stackanalys kommer ignorera anropet frÃ¥n %s till %s\n" + +#: elf32-spu.c:3985 +msgid " %s: 0x%v\n" +msgstr " %s: 0x%v\n" + +#: elf32-spu.c:3986 +msgid "%s: 0x%v 0x%v\n" +msgstr "%s: 0x%v 0x%v\n" + +#: elf32-spu.c:3991 +msgid " calls:\n" +msgstr " anrop:\n" + +#: elf32-spu.c:3999 +#, 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 duplicerad i %s\n" + +#: elf32-spu.c:4308 +#, c-format +msgid "%s duplicated\n" +msgstr "%s duplicerad\n" + +#: elf32-spu.c:4315 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "tyvärr, inget stöd för duplicerade objektfiler i auto-överläggsskript\n" + +#: elf32-spu.c:4356 +msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" +msgstr "icke-överläggsstorlek pÃ¥ 0x%v plus största överläggsstorlek pÃ¥ 0x%v överstiger lokal lagring\n" + +#: elf32-spu.c:4511 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "%B:%A%s överstiger överläggsstorlek\n" + +#: elf32-spu.c:4673 +msgid "Stack size for call graph root nodes.\n" +msgstr "Stackstorlek för anropsgrafens rotnoder.\n" + +#: elf32-spu.c:4674 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" +msgstr "" +"\n" +"Stackstorlek för funktioner. Annoteringar: ”*” max stack, ”t” tail-anrop\n" + +#: elf32-spu.c:4684 +msgid "Maximum stack required is 0x%v\n" +msgstr "Maximal stack som krävs är 0x%v\n" + +#: elf32-spu.c:4775 +msgid "fatal error while creating .fixup" +msgstr "ödesdigert fel när .fixup skapades" + +#: elf32-spu.c:5005 +msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%s+0x%lx): olöslig %s-omlokalisering mot symbol ”%s”" + +#: elf32-tic6x.c:1600 +msgid "warning: generating a shared library containing non-PIC code" +msgstr "varning: generera ett delat bibliotek innehÃ¥llandes icke-PIC-kod" + +#: elf32-tic6x.c:1605 +msgid "warning: generating a shared library containing non-PID code" +msgstr "varning: generera ett delat bibliotek innehÃ¥llandes icke-PID-kod" + +#: elf32-tic6x.c:2524 +msgid "%B: SB-relative relocation but __c6xabi_DSBT_BASE not defined" +msgstr "%B: SB-relativ omlokalisering, men __c6xabi_DSBT_BASE har inte definierats" + +#: elf32-tic6x.c:3648 +msgid "%B: error: unknown mandatory EABI object attribute %d" +msgstr "%B: fel: okänt tvingande EABI-objektattribut %d" + +#: elf32-tic6x.c:3656 +msgid "%B: warning: unknown EABI object attribute %d" +msgstr "%B: varning: okänt EABI-objektattribut %d" + +#: elf32-tic6x.c:3768 elf32-tic6x.c:3776 +msgid "error: %B requires more stack alignment than %B preserves" +msgstr "fel: %B kräver mer stackrättning än %B bevarar" + +#: elf32-tic6x.c:3786 elf32-tic6x.c:3795 +msgid "error: unknown Tag_ABI_array_object_alignment value in %B" +msgstr "fel: okänt Tag_ABI_array_object_alignment-värde i %B" + +#: elf32-tic6x.c:3804 elf32-tic6x.c:3813 +msgid "error: unknown Tag_ABI_array_object_align_expected value in %B" +msgstr "fel: okänt Tag_ABI_array_object_align_expected-värde i %B" + +#: elf32-tic6x.c:3821 elf32-tic6x.c:3828 +msgid "error: %B requires more array alignment than %B preserves" +msgstr "fel: %B kräver mer vektorjustering än %B bevarar" + +#: elf32-tic6x.c:3850 +msgid "warning: %B and %B differ in wchar_t size" +msgstr "varning: %B och %B skiljer i wchar_t-storlek" + +#: elf32-tic6x.c:3868 +msgid "warning: %B and %B differ in whether code is compiled for DSBT" +msgstr "varning: %B och %B skiljer sig ifrÃ¥ga om koden är kompilerad för DSBT eller ej" + +#: elf32-v850.c:157 +#, c-format +msgid "Variable `%s' cannot occupy in multiple small data regions" +msgstr "Variabel ”%s” kan inte befinna sig i flera smÃ¥ dataomrÃ¥den" + +#: elf32-v850.c:160 +#, c-format +msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" +msgstr "Variabel ”%s” kan bara vara i ett av de smÃ¥, tomma och pyttesmÃ¥ dataomrÃ¥dena" + +#: elf32-v850.c:163 +#, c-format +msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" +msgstr "Variabel ”%s” kan inte vara i bÃ¥de smÃ¥ och tomma dataomrÃ¥den samtidigt" + +#: elf32-v850.c:166 +#, c-format +msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" +msgstr "Variabel ”%s” kan inte vara i bÃ¥de smÃ¥ och pyttesmÃ¥ dataomrÃ¥den samtidigt" + +#: elf32-v850.c:169 +#, c-format +msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" +msgstr "Variabel ”%s” kan inte vara i bÃ¥de tomma och pyttesmÃ¥ dataomrÃ¥den samtidigt" + +#: elf32-v850.c:467 +msgid "FAILED to find previous HI16 reloc" +msgstr "KUNDE INTE HITTA föregÃ¥ende HI16-omlokalisering" + +#: elf32-v850.c:2293 +msgid "could not locate special linker symbol __gp" +msgstr "kunde inte lokalisera speciell länkarsymbol __gp" + +#: elf32-v850.c:2297 +msgid "could not locate special linker symbol __ep" +msgstr "kunde inte lokalisera speciell länkarsymbol __ep" + +#: elf32-v850.c:2301 +msgid "could not locate special linker symbol __ctbp" +msgstr "kunde inte lokalisera speciell länkarsymbol __ctbp" + +#: elf32-v850.c:2471 elf32-v850.c:2534 +msgid "%B: Architecture mismatch with previous modules" +msgstr "%B: Arkitekturen stämmer inte överens med föregÃ¥ende moduler" + +#: elf32-v850.c:2478 +msgid "%B: Alignment mismatch with previous modules" +msgstr "%B: Justering stämde inte med föregÃ¥ende moduler" + +#. xgettext:c-format. +#: elf32-v850.c:2553 +#, c-format +msgid "private flags = %lx: " +msgstr "privata flaggor = %lx: " + +#: elf32-v850.c:2558 +#, c-format +msgid "unknown v850 architecture" +msgstr "okänd v850-arkitektur" + +#: elf32-v850.c:2560 +#, c-format +msgid "v850 E3 architecture" +msgstr "v850 E3-arkitektur" + +#: elf32-v850.c:2562 elf32-v850.c:2572 +#, c-format +msgid "v850 architecture" +msgstr "v850-arkitektur" + +#: elf32-v850.c:2565 +#, c-format +msgid ", 8-byte data alignment" +msgstr ", 8-bytedatajustering" + +#: elf32-v850.c:2573 +#, c-format +msgid "v850e architecture" +msgstr "v850e-arkitektur" + +#: elf32-v850.c:2574 +#, c-format +msgid "v850e1 architecture" +msgstr "v850e1-arkitektur" + +#: elf32-v850.c:2575 +#, c-format +msgid "v850e2 architecture" +msgstr "v850e2-arkitektur" + +#: elf32-v850.c:2576 +#, c-format +msgid "v850e2v3 architecture" +msgstr "v850e2v3-arkitektur" + +#: elf32-v850.c:2577 +#, c-format +msgid "v850e3v5 architecture" +msgstr "v850e3v5-arkitektur" + +#: elf32-vax.c:532 +#, c-format +msgid " [nonpic]" +msgstr " [icke-pic]" + +#: elf32-vax.c:535 +#, c-format +msgid " [d-float]" +msgstr " [d-flyttal]" + +#: elf32-vax.c:538 +#, c-format +msgid " [g-float]" +msgstr " [g-flyttal]" + +#: elf32-vax.c:656 +#, c-format +msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" +msgstr "%s: varning: GOT-addend %ld till ”%s” stämmer inte överens med tidigare GOT-addend %ld" + +#: elf32-vax.c:1543 +#, c-format +msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" +msgstr "%s: varning: PLT-addend %d till ”%s” frÃ¥n sektionen %s ignorerades" + +#: elf32-vax.c:1668 +#, c-format +msgid "%s: warning: %s relocation against symbol `%s' from %s section" +msgstr "%s: varning: %s-omlokalisering mot symbolen ”%s” frÃ¥n sektionen %s" + +#: elf32-vax.c:1674 +#, c-format +msgid "%s: warning: %s relocation to 0x%x from %s section" +msgstr "%s: varning: %s-omlokalisering till 0x%x frÃ¥n sektionen %s" + +#: elf32-xgate.c:686 +#, c-format +msgid "cpu=XGATE]" +msgstr "cpu=XGATE]" + +#: elf32-xgate.c:688 +#, c-format +msgid "error reading cpu type from elf private data" +msgstr "fel vid läsning av cpu-typ frÃ¥n privat elf-data" + +#: elf32-xstormy16.c:455 elf64-ia64-vms.c:2072 elf32-ia64.c:2330 +#: elf64-ia64.c:2330 +msgid "non-zero addend in @fptr reloc" +msgstr "icke-tom addend i @fptr-omlokalisering" + +#: elf32-xtensa.c:908 +msgid "%B(%A): invalid property table" +msgstr "%B(%A): ogiltig egenskapstabell" + +#: elf32-xtensa.c:2774 +msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" +msgstr "%B(%A+0x%lx): omlokaliseringsförskjutning utanför intervall (storlek=0x%x)" + +#: elf32-xtensa.c:2853 elf32-xtensa.c:2974 +msgid "dynamic relocation in read-only section" +msgstr "dynamisk omlokalisering i skrivskyddad sektion" + +#: elf32-xtensa.c:2950 +msgid "TLS relocation invalid without dynamic sections" +msgstr "TLS-omlokalisering ogiltig utan dynamiska sektioner" + +#: elf32-xtensa.c:3169 +msgid "internal inconsistency in size of .got.loc section" +msgstr "intern inkonsekvens i storleken för .got.loc-sektionen" + +#: elf32-xtensa.c:3482 +msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" +msgstr "%B: inkompatibel maskintyp. Utdata är 0x%x. Indata är 0x%x" + +#: elf32-xtensa.c:4713 elf32-xtensa.c:4721 +msgid "Attempt to convert L32R/CALLX to CALL failed" +msgstr "Försök att konvertera L32R/CALLX till CALL misslyckades" + +#: elf32-xtensa.c:6330 elf32-xtensa.c:6406 elf32-xtensa.c:7522 +msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" +msgstr "%B(%A+0x%lx): kunde inte avkoda instruktion; kanske stämmer inställningarna inte överens" + +#: elf32-xtensa.c:7262 +msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" +msgstr "%B(%A+0x%lx): kunde inte avkoda instruktion för XTENSA_ASM_SIMPLIFY-omlokalisering; kanske stämmer inställningarna inte överens" + +#: elf32-xtensa.c:9022 +msgid "invalid relocation address" +msgstr "ogiltig omlokaliseringsadress" + +#: elf32-xtensa.c:9071 +msgid "overflow after relaxation" +msgstr "överbelastning efter relax" + +#: elf32-xtensa.c:10203 +msgid "%B(%A+0x%lx): unexpected fix for %s relocation" +msgstr "%B(%A+0x%lx): oväntad fix för %s-omlokalisering" + +#: elf64-alpha.c:474 +msgid "GPDISP relocation did not find ldah and lda instructions" +msgstr "GPDISP-omlokalisering hittade inga ldah- och lda-instruktioner" + +#: elf64-alpha.c:2503 +msgid "%B: .got subsegment exceeds 64K (size %d)" +msgstr "%B: .got-delsegment överstiger 64K (storlek %d)" + +#: elf64-alpha.c:4396 elf64-alpha.c:4408 +msgid "%B: gp-relative relocation against dynamic symbol %s" +msgstr "%B: gp-relativ omlokalisering mot dynamisk symbol %s" + +#: elf64-alpha.c:4434 elf64-alpha.c:4574 +msgid "%B: pc-relative relocation against dynamic symbol %s" +msgstr "%B: pc-relativ omlokalisering mot dynamisk symbol %s" + +#: elf64-alpha.c:4462 +msgid "%B: change in gp: BRSGP %s" +msgstr "%B: ändring i gp: BRSGP %s" + +#: elf64-alpha.c:4487 +msgid "" +msgstr "" + +#: elf64-alpha.c:4492 +msgid "%B: !samegp reloc against symbol without .prologue: %s" +msgstr "%B: !samegp-omlokalisering mot symbol utan .prologue: %s" + +#: elf64-alpha.c:4549 +msgid "%B: unhandled dynamic relocation against %s" +msgstr "%B: ohanterad dynamisk omlokalisering mot %s" + +#: elf64-alpha.c:4581 +msgid "%B: pc-relative relocation against undefined weak symbol %s" +msgstr "%B: pc-relativ omlokalisering mot odefinierad svag symbol %s" + +#: elf64-alpha.c:4645 +msgid "%B: dtp-relative relocation against dynamic symbol %s" +msgstr "%B: dtp-relativ omlokalisering mot dynamisk symbol %s" + +#: elf64-alpha.c:4668 +msgid "%B: tp-relative relocation against dynamic symbol %s" +msgstr "%B: tp-relativ omlokalisering mot dynamisk symbol %s" + +#: elf64-hppa.c:2084 +#, c-format +msgid "stub entry for %s cannot load .plt, dp offset = %ld" +msgstr "stubbpost för %s kan inte läsa in .plt, dp-förskjutning = %ld" + +#: elf64-hppa.c:3280 +msgid "%B(%A+0x%" +msgstr "%B(%A+0x%" + +#: elf64-ia64-vms.c:587 elf32-ia64.c:619 elf64-ia64.c:619 +msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch." +msgstr "%B: Kan inte relax br pÃ¥ 0x%lx i sektion ”%A”. Använd brl eller indirekt gren." + +#: elf64-ia64-vms.c:2027 elf32-ia64.c:2278 elf64-ia64.c:2278 +msgid "@pltoff reloc against local symbol" +msgstr "@pltoff-omlokalisering mot lokal symbol" + +#: elf64-ia64-vms.c:3279 elf32-ia64.c:3684 elf64-ia64.c:3684 +#, c-format +msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" +msgstr "%s: kort datasegment spillde över (0x%lx >= 0x400000)" + +#: elf64-ia64-vms.c:3290 elf32-ia64.c:3695 elf64-ia64.c:3695 +#, c-format +msgid "%s: __gp does not cover short data segment" +msgstr "%s: __gp täcker inte kort datasegment" + +#: elf64-ia64-vms.c:3555 elf32-ia64.c:3962 elf64-ia64.c:3962 +msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" +msgstr "%B: Icke-pic kod med imm-omlokalisering mot dynamisk symbol ”%s”" + +#: elf64-ia64-vms.c:3617 elf32-ia64.c:4029 elf64-ia64.c:4029 +msgid "%B: @gprel relocation against dynamic symbol %s" +msgstr "%B: @gprel-omlokalisering mot dynamisk symbol %s" + +#: elf64-ia64-vms.c:3676 elf32-ia64.c:4092 elf64-ia64.c:4092 +msgid "%B: linking non-pic code in a position independent executable" +msgstr "%B: Länkar icke-pic kod i en positionsoberoende körfil" + +#: elf64-ia64-vms.c:3777 elf32-ia64.c:4229 elf64-ia64.c:4229 +msgid "%B: @internal branch to dynamic symbol %s" +msgstr "%B: @internal-gren till dynamisk symbol %s" + +#: elf64-ia64-vms.c:3779 elf32-ia64.c:4231 elf64-ia64.c:4231 +msgid "%B: speculation fixup to dynamic symbol %s" +msgstr "%B: Spekuleringsfix till dynamisk symbol %s" + +#: elf64-ia64-vms.c:3781 elf32-ia64.c:4233 elf64-ia64.c:4233 +msgid "%B: @pcrel relocation against dynamic symbol %s" +msgstr "%B: @pcrel-omlokalisering mot dynamisk symbol %s" + +#: elf64-ia64-vms.c:3905 elf32-ia64.c:4430 elf64-ia64.c:4430 +msgid "unsupported reloc" +msgstr "omlokaliseringen stöds inte" + +#: elf64-ia64-vms.c:3942 elf32-ia64.c:4468 elf64-ia64.c:4468 +msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." +msgstr "%B: Saknar TLS-sektion för omlokalisering %s mot ”%s” pÃ¥ 0x%lx i sektion ”%A”." + +#: elf64-ia64-vms.c:3957 elf32-ia64.c:4483 elf64-ia64.c:4483 +msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)." +msgstr "%B: Kan inte göra relax pÃ¥ br (%s) till ”%s” pÃ¥ 0x%lx i sektion ”%A” med storlek 0x%lx (> 0x1000000)." + +#: elf64-ia64-vms.c:4246 elf32-ia64.c:4745 elf64-ia64.c:4745 +msgid "%B: linking trap-on-NULL-dereference with non-trapping files" +msgstr "%B: Länkar avbryt-vid-NOLL-dereferens med ickeavbrytande filer" + +#: elf64-ia64-vms.c:4255 elf32-ia64.c:4754 elf64-ia64.c:4754 +msgid "%B: linking big-endian files with little-endian files" +msgstr "%B: Länkar filer med rak byteordning med filer med omvänd byteordning" + +#: elf64-ia64-vms.c:4264 elf32-ia64.c:4763 elf64-ia64.c:4763 +msgid "%B: linking 64-bit files with 32-bit files" +msgstr "%B: Länkar 64 bit-filer med 32 bit-filer" + +#: elf64-ia64-vms.c:4273 elf32-ia64.c:4772 elf64-ia64.c:4772 +msgid "%B: linking constant-gp files with non-constant-gp files" +msgstr "%B: Länkar konstant-gp-filer med ickekonstant-gp-filer" + +#: elf64-ia64-vms.c:4283 elf32-ia64.c:4782 elf64-ia64.c:4782 +msgid "%B: linking auto-pic files with non-auto-pic files" +msgstr "%B: Länkar auto-pic-filer med ickeauto-pic-filer" + +#: elf64-ia64-vms.c:5125 elflink.c:4299 +msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A" +msgstr "Varning: rättning %u för gemensam symbol ”%s” i %B är större än rättningen (%u) av dess sektion %A" + +#: elf64-ia64-vms.c:5131 elflink.c:4305 +msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" +msgstr "Varning: rättning %u för symbol ”%s” i %B är mindre än %u i %B" + +#: elf64-ia64-vms.c:5146 elflink.c:4321 +msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" +msgstr "Varning: storleken för symbol ”%s” ändrades frÃ¥n %lu i %B till %lu i %B" + +#: elf64-mmix.c:986 +msgid "" +"invalid input relocation when producing non-ELF, non-mmo format output.\n" +" Please use the objcopy program to convert from ELF or mmo,\n" +" or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\"" +msgstr "" +"ogiltig inmatningsomlokalisering vid skapande av icke-ELF, icke-mmoformatutmatning.\n" +" Använd objcopy-programmet för att konvertera frÃ¥n ELF till mmo,\n" +" eller assemblera med ”-no-expand” (för gcc, ”-Wa,-no-expand”" + +#: elf64-mmix.c:1170 +msgid "" +"invalid input relocation when producing non-ELF, non-mmo format output.\n" +" Please use the objcopy program to convert from ELF or mmo,\n" +" or compile using the gcc-option \"-mno-base-addresses\"." +msgstr "" +"ogiltig inmatningsomlokalisering vid skapandet av icke-ELF, icke-mmoformatutmatning.\n" +" Använd programmet objcopy till att konvertera frÃ¥n ELF eller mmo,\n" +" eller kompilera genom flaggan gcc ”-mno-base-addresses”." + +#: elf64-mmix.c:1196 +#, 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: Internt inkonsistensfel för värdet för\n" +" länkarallokerat globalt register: länkat: 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: bas-plus-förskjutningsomlokalisering mot registersymbol: (okänd) i %s" + +#: elf64-mmix.c:1623 +#, c-format +msgid "%s: base-plus-offset relocation against register symbol: %s in %s" +msgstr "%s: bas-plus-förskjutningsomlokalisering mot registersymbol: %s i %s" + +#: elf64-mmix.c:1667 +#, c-format +msgid "%s: register relocation against non-register symbol: (unknown) in %s" +msgstr "%s: registeromlokalisering mot icke-registersymbol: (okänd) i %s" + +#: elf64-mmix.c:1672 +#, c-format +msgid "%s: register relocation against non-register symbol: %s in %s" +msgstr "%s: registeromlokalisering mot icke-registersymbol: %s i %s" + +#: elf64-mmix.c:1709 +#, c-format +msgid "%s: directive LOCAL valid only with a register or absolute value" +msgstr "%s: LOCAL-direktivet är endast giltigt med ett register eller absolutvärde" + +#: elf64-mmix.c:1739 +#, c-format +msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." +msgstr "%s: LOCAL-direktiv: Register $%ld är inte ett lokalt register. Första globala registret är $%ld." + +#: elf64-mmix.c:2198 +#, c-format +msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" +msgstr "%s: Fel: flera definitioner av ”%s”; början pÃ¥ %s är inställd i en tidigare länkad fil\n" + +#: elf64-mmix.c:2252 +msgid "Register section has contents\n" +msgstr "Registersektion har innehÃ¥ll\n" + +#: elf64-mmix.c:2441 +#, c-format +msgid "" +"Internal inconsistency: remaining %u != max %u.\n" +" Please report this bug." +msgstr "" +"Intern inkonsekvens: Ã¥terstÃ¥ende %u != max %u.\n" +" Rapportera detta fel." + +#: elf64-ppc.c:4463 +msgid "%P: %B: cannot create stub entry %s\n" +msgstr "%P: %B: kan inte skapa stubbposten %s\n" + +#: elf64-ppc.c:4810 +msgid "%P: symbol '%s' has invalid st_other for ABI version 1\n" +msgstr "%P: symbolen ”%s” har ogiltig st_other för ABI version 1\n" + +#: elf64-ppc.c:5170 +msgid "%P: .opd not allowed in ABI version %d\n" +msgstr "%P: .opd är inte tillÃ¥tet i ABI-versionen %d\n" + +#: elf64-ppc.c:5809 +msgid "%B uses unknown e_flags 0x%lx" +msgstr "%B använder okänd e_flags 0x%lx" + +#: elf64-ppc.c:5816 +msgid "%B: ABI version %ld is not compatible with ABI version %ld output" +msgstr "%B: ABI-versionen %ld är inte kompatibel med ABI version %ld-utmatning" + +#: elf64-ppc.c:5843 +#, c-format +msgid " [abiv%ld]" +msgstr " [abiv%ld]" + +#: elf64-ppc.c:7007 +msgid "%P: copy reloc against `%T' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" +msgstr "%P: kopiera omlokalisering mot ”%T” kräver lazy plt-länkning; undvik att sätta LD_BIND_NOW=1 eller uppgradera gcc\n" + +#: elf64-ppc.c:7270 +msgid "%B: undefined symbol on R_PPC64_TOCSAVE relocation" +msgstr "%B: odefinierad symbol vid R_PPC64_TOCSAVE-omlokalisering" + +#: elf64-ppc.c:7499 +msgid "%P: dynreloc miscount for %B, section %A\n" +msgstr "%P: dynreloc-felräkning för %B, sektion %A\n" + +#: elf64-ppc.c:7583 +msgid "%B: .opd is not a regular array of opd entries" +msgstr "%B: .opd är inte ett vanligt fält av opd-poster" + +#: elf64-ppc.c:7592 +msgid "%B: unexpected reloc type %u in .opd section" +msgstr "%B: oväntad omlokaliseringstyp %u i .opd-sektion" + +#: elf64-ppc.c:7613 +msgid "%B: undefined sym `%s' in .opd section" +msgstr "%B: odefinierad sym ”%s” i .opd-sektion" + +#: elf64-ppc.c:8177 +msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" +msgstr "%H __tls_get_addr förlorat arg, TLS-optimering inaktiverat\n" + +#: elf64-ppc.c:8516 elf64-ppc.c:9139 +#, c-format +msgid "%s defined on removed toc entry" +msgstr "%s definierades i borttagen innehÃ¥llsförteckningspost" + +#: elf64-ppc.c:8868 +msgid "%P: %H: toc optimization is not supported for %s instruction.\n" +msgstr "%P: %H: toc-optimering stöds inte av %s-instruktionen.\n" + +#: elf64-ppc.c:9096 +msgid "%P: %H: %s references optimized away TOC entry\n" +msgstr "%P: %H: %s-referenser optimerade bort TOC-post\n" + +#: elf64-ppc.c:10394 +msgid "%P: cannot find opd entry toc for `%T'\n" +msgstr "%P: kan inte hitta opd-post toc för ”%T”\n" + +#: elf64-ppc.c:10479 +msgid "%P: long branch stub `%s' offset overflow\n" +msgstr "%P: lÃ¥ng grenstubbe ”%s”-förskjutningsspill\n" + +#: elf64-ppc.c:10538 +msgid "%P: can't find branch stub `%s'\n" +msgstr "%P: kan inte hitta grenstubb ”%s”\n" + +#: elf64-ppc.c:10602 elf64-ppc.c:10749 elf64-ppc.c:12416 +msgid "%P: linkage table error against `%T'\n" +msgstr "%P: länkningstabellfel mot ”%T”\n" + +#: elf64-ppc.c:10940 +msgid "%P: can't build branch stub `%s'\n" +msgstr "%P: kan inte bygga grenstubbe ”%s”\n" + +#: elf64-ppc.c:11748 +msgid "%B section %A exceeds stub group size" +msgstr "%B-sektion %A överstiger stubbgruppstorleken" + +#: elf64-ppc.c:12662 elf64-ppc.c:12697 +msgid "%P: %s offset too large for .eh_frame sdata4 encoding" +msgstr "%P: %s-förskjutning för stor för .eh_frame sdata4-kodning" + +#: elf64-ppc.c:12758 +msgid "%P: stubs don't match calculated size\n" +msgstr "%P: stubbe stämmer inte överens med beräknad storlek\n" + +#: elf64-ppc.c:12770 +#, 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\n" +" plt call toc %lu" +msgstr "" +"länkarstubbe i %u grupp%s\n" +" gren %lu\n" +" toc-just %lu\n" +" lÃ¥nggren %lu\n" +" lÃ¥ng-toc-just %lu\n" +" plt-anr %lu\n" +" plt-anr-toc %lu" + +#: elf64-ppc.c:13096 +msgid "%P: %H: %s used with TLS symbol `%T'\n" +msgstr "%P: %H: %s använt med TLS-symbol ”%T”\n" + +#: elf64-ppc.c:13097 +msgid "%P: %H: %s used with non-TLS symbol `%T'\n" +msgstr "%P: %H: %s använt med icke-TLS-symbol ”%T”\n" + +#: elf64-ppc.c:13675 +msgid "%P: %H: call to `%T' lacks nop, can't restore toc; recompile with -fPIC\n" +msgstr "%P: %H: anrop till ”%T” saknar nop, kan inte Ã¥terställa toc; kompilera med -fPIC\n" + +#: elf64-ppc.c:13793 +msgid "%P: %B: unknown relocation type %d for `%T'\n" +msgstr "%P: %B: okänd omlokaliseringstyp %d för ”%T”\n" + +#: elf64-ppc.c:14310 +msgid "%P: %H: %s for indirect function `%T' unsupported\n" +msgstr "%P: %H: %s för indirekta funktioner ”%T” stöds ej\n" + +#: elf64-ppc.c:14417 +msgid "%P: %B: %s is not supported for `%T'\n" +msgstr "%P: %B: %s stöds ej för ”%T”\n" + +#: elf64-ppc.c:14565 +msgid "%P: %H: error: %s not a multiple of %u\n" +msgstr "%P: %H: fel: %s är inte en multipel av %u\n" + +#: elf64-ppc.c:14586 +msgid "%P: %H: unresolvable %s against `%T'\n" +msgstr "%P: %H: kunde inte lösas med %s mot ”%T”\n" + +#: elf64-ppc.c:14644 +msgid "%P: %H: %s against `%T': error %d\n" +msgstr "%P: %H: %s mot ”%T”: fel %d\n" + +#: elf64-sh64.c:1686 +#, c-format +msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" +msgstr "%s: fel: ojusterad omlokaliseringstyp %d pÃ¥ %08x omlokalisering %08x\n" + +#: elf64-sparc.c:446 +msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" +msgstr "%B: Bara registren %%g[2367] kan deklareras med STT_REGISTER" + +#: elf64-sparc.c:466 +msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" +msgstr "Registret %%g%d användes pÃ¥ ett inkompatibelt sätt: %s i %B, förut %s i %B" + +#: elf64-sparc.c:489 +msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" +msgstr "Symbolen ”%s” har skiljande typer: REGISTER i %B, förut %s i %B" + +#: elf64-sparc.c:534 +msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" +msgstr "Symbolen ”%s” har skiljande typer: %s i %B, förut REGISTER i %B" + +#: elf64-sparc.c:687 +msgid "%B: linking UltraSPARC specific with HAL specific code" +msgstr "%B: länkar UltraSPARC-specifik med HAL-specifik kod" + +#: elf64-x86-64.c:1530 +msgid "%B: relocation %s against symbol `%s' isn't supported in x32 mode" +msgstr "%B: omlokalisering %s mot symbol ”%s” stöds inte i x32-läge" + +#: elf64-x86-64.c:1688 +msgid "%B: '%s' accessed both as normal and thread local symbol" +msgstr "%B: ”%s” Ã¥tkommen bÃ¥de som normal och trÃ¥dlokal symbol" + +#: elf64-x86-64.c:3405 /src/binutils-gdb/bfd/elfnn-aarch64.c:3511 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d" +msgstr "%B: omlokalisering %s mot STT_GNU_IFUNC-symbolen ”%s” har en addend som inte är noll: %d" + +#: elf64-x86-64.c:3667 +msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" +msgstr "%B: omlokalisering R_X86_64_GOTOFF64 mot skyddad funktion ”%s” kan inte användas när ett delat objekt skapas" + +#: elf64-x86-64.c:3787 +msgid "; recompile with -fPIC" +msgstr "; kompilera om med -fPIC" + +#: elf64-x86-64.c:3792 +msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" +msgstr "%B: omlokalisering %s mot %s ”%s” kan inte användas när ett delat objekt%s skapas" + +#: elf64-x86-64.c:3794 +msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +msgstr "%B: omlokalisering %s mot odefinierad %s ”%s” kan inte användas när ett delat objekt%s skapas" + +#: elf64-x86-64.c:3900 +msgid "%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range" +msgstr "%B: addend -0x%x i omlokalisering %s mot symbolen ”%s” vid 0x%lx i sektionen ”%A” är utanför intervallet" + +#: elf64-x86-64.c:3908 +msgid "%B: addend 0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range" +msgstr "%B: adderade 0x%x i omlokalisering %s mot symbolen ”%s” vid 0x%lx i sektionen ”%A” är utanför intervallet" + +#: elfcode.h:760 +#, c-format +msgid "warning: %s has a corrupt string table index - ignoring" +msgstr "varning: %s har ett fördärvat strängtabellindex - ignorerar" + +#: elfcode.h:1186 +#, c-format +msgid "%s: version count (%ld) does not match symbol count (%ld)" +msgstr "%s: versionsantal (%ld) stämmer inte med symbolantal (%ld)" + +#: elfcode.h:1440 +#, c-format +msgid "%s(%s): relocation %d has invalid symbol index %ld" +msgstr "%s(%s): omlokalisering %d har ogiltigt symbolindex %ld" + +#: elfcore.h:305 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." +msgstr "Varning: %B är avkortad: förväntade mig kärnfilsstorlek >= %lu, hittade: %lu." + +#: elflink.c:1143 +msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS-definiering i %B-sektionen %A stämmer inte överens med icke-TLS-definieringen i %B-sektionen %A" + +#: elflink.c:1148 +msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" +msgstr "%s: TLS-referensen i %B stämmer inte överens med icke-TLS-referensen i %B" + +#: elflink.c:1153 +msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" +msgstr "%s: TLS-definieringen i %B-sektionen %A stämmer inte överens med icke-TLS-referensen i %B" + +#: elflink.c:1158 +msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS-referensen i %B stämmer inte överens med icke-TLS-definieringen i %B-sektionen %A" + +#: elflink.c:1763 +msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" +msgstr "%B: oväntad omdefiniering av indirekt versionsbestämd symbol ”%s”" + +#: elflink.c:2066 +msgid "%B: version node not found for symbol %s" +msgstr "%B: versionsnod hittades inte för symbol %s" + +#: elflink.c:2157 +msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" +msgstr "%B: felaktigt omlokaliseringssymbolindex (0x%lx >= 0x%lx) för förskjutning 0x%lx i sektion ”%A”" + +#: elflink.c:2168 +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: symbolindex är inte noll (0x%lx) för förskjutning 0x%lx i sektion ”%A” när objektfilen saknar symboltabell" + +#: elflink.c:2358 +msgid "%B: relocation size mismatch in %B section %A" +msgstr "%B: omlokaliseringsstorlek stämmer inte överens i %B-sektionen %A" + +#: elflink.c:2640 +#, c-format +msgid "warning: type and size of dynamic symbol `%s' are not defined" +msgstr "varning: typen och storleken pÃ¥ dynamiska symbolen ”%s” är inte definierade" + +#: elflink.c:3403 +msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n" +msgstr "%P: alternativ ELF-maskinkod hittades (%d) i %B, förväntade mig %d\n" + +#: elflink.c:4032 +msgid "%B: %s: invalid version %u (max %d)" +msgstr "%B: %s: ogiltig version %u (max %d)" + +#: elflink.c:4068 +msgid "%B: %s: invalid needed version %d" +msgstr "%B: %s: ogiltigt versionskrav %d" + +#: elflink.c:4452 +msgid "%B: undefined reference to symbol '%s'" +msgstr "%B: odefinierad referens till symbolen ”%s”" + +#: elflink.c:5523 +msgid "%B: stack size specified and %s set" +msgstr "%B: stackstorlek angiven och %s satt" + +#: elflink.c:5526 +msgid "%B: %s not absolute" +msgstr "%B: %s inte absolut" + +#: elflink.c:5824 +#, c-format +msgid "%s: undefined version: %s" +msgstr "%s: odefinierad version: %s" + +#: elflink.c:5892 +msgid "%B: .preinit_array section is not allowed in DSO" +msgstr "%B: .preinit_array-sektion tillÃ¥ts inte i DSO" + +#: elflink.c:7657 +#, c-format +msgid "undefined %s reference in complex symbol: %s" +msgstr "odefinierad %s-referens i komplex symbol: %s" + +#: elflink.c:7811 +#, c-format +msgid "unknown operator '%c' in complex symbol" +msgstr "Okänd operand ”%c” i komplex symbol" + +#: elflink.c:8165 elflink.c:8182 elflink.c:8219 elflink.c:8236 +msgid "%B: Unable to sort relocs - they are in more than one size" +msgstr "%B: Kunde inte sortera omlokaliseringar - de finns i mer än en storlek" + +#: elflink.c:8196 elflink.c:8250 +msgid "%B: Unable to sort relocs - they are of an unknown size" +msgstr "%B: Kunde inte sortera omlokaliseringar - deras storlek är okänd" + +#: elflink.c:8301 +msgid "Not enough memory to sort relocations" +msgstr "Inte tillräckligt med minne för att sortera omlokaliseringar" + +#: elflink.c:8494 +msgid "%B: Too many sections: %d (>= %d)" +msgstr "%B: För mÃ¥nga sektioner: %d (>= %d)" + +#: elflink.c:8775 +msgid "%B: internal symbol `%s' in %B is referenced by DSO" +msgstr "%B: intern symbol ”%s” i %B används av DSO" + +#: elflink.c:8777 +msgid "%B: hidden symbol `%s' in %B is referenced by DSO" +msgstr "%B: dold symbol ”%s” i %B används av DSO" + +#: elflink.c:8779 +msgid "%B: local symbol `%s' in %B is referenced by DSO" +msgstr "%B: lokal symbol ”%s” i %B används av DSO" + +#: elflink.c:8890 +msgid "%B: could not find output section %A for input section %A" +msgstr "%B: kunde inte hitta utdata-sektionen %A för indata-sektion %A" + +#: elflink.c:9013 +msgid "%B: protected symbol `%s' isn't defined" +msgstr "%B: den skyddade symbolen ”%s” har inte definierats" + +#: elflink.c:9015 +msgid "%B: internal symbol `%s' isn't defined" +msgstr "%B: den interna symbolen ”%s” har inte definierats" + +#: elflink.c:9017 +msgid "%B: hidden symbol `%s' isn't defined" +msgstr "%B: den dolda symbolen ”%s” har inte definierats" + +#: elflink.c:9043 +msgid "%B: No symbol version section for versioned symbol `%s'" +msgstr "%B: Ingen symbolversionssektion för versionerad symbol ”%s”" + +#: elflink.c:9598 +msgid "error: %B: size of section %A is not multiple of address size" +msgstr "Fel: %B: storleken pÃ¥ sektion %A är inte en multipel av adresstorleken" + +#: elflink.c:9645 +msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol" +msgstr "fel: %B innehÃ¥ller en omlokalisering (0x%s) för sektion %A som använder en icke-existerande global symbol" + +#: elflink.c:10369 +msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" +msgstr "%A har bÃ¥de sorterade [”%A” i %B] och osorterade [”%A” i %B] sektioner" + +#: elflink.c:10374 +#, c-format +msgid "%A has both ordered and unordered sections" +msgstr "%A har bÃ¥de sorterade och osorterade sektioner" + +#: elflink.c:10982 +msgid "%B: file class %s incompatible with %s" +msgstr "%B: Filklassen %s är inkompatibel med %s" + +#: elflink.c:11303 elflink.c:11347 +msgid "%B: could not find output section %s" +msgstr "%B: kunde inte hitta utdata-sektion %s" + +#: elflink.c:11308 +#, c-format +msgid "warning: %s section has zero size" +msgstr "varning: sektionen %s har nollstorlek" + +#: elflink.c:11353 +#, c-format +msgid "warning: section '%s' is being made into a note" +msgstr "varning: sektion ”%s” görs om till en anteckning" + +#: elflink.c:11419 +msgid "%P%X: read-only segment has dynamic relocations.\n" +msgstr "%P%X: skrivskyddat segment har dynamiska omlokaliseringar.\n" + +#: elflink.c:11422 +msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" +msgstr "%P: varning: skapar en DT_TEXTREL i ett delat objekt.\n" + +#: elflink.c:11545 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: kan inte läsa symboler: %E\n" + +#: elflink.c:11989 +msgid "Removing unused section '%s' in file '%B'" +msgstr "Tar bort oanvända sektionen ”%s” i filen ”%B”" + +#: elflink.c:12200 +msgid "Warning: gc-sections option ignored" +msgstr "Varning: flaggan gc-sections ignoreras" + +#: elflink.c:12489 +#, c-format +msgid "Unrecognized INPUT_SECTION_FLAG %s\n" +msgstr "Okänd INPUT_SECTION_FLAG %s\n" + +#: elfxx-mips.c:1419 +msgid "static procedure (no name)" +msgstr "statisk procedur (inget namn)" + +#: elfxx-mips.c:5476 +msgid "MIPS16 and microMIPS functions cannot call each other" +msgstr "MIPS16 och microMIPS-funktioner kan inte anropa varandra" + +#: elfxx-mips.c:6087 +msgid "%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled." +msgstr "%B: %A+0x%lx: Stöder inte hopp mellan ISA-lägen; överväg omkompilering med korslänkning aktiverat." + +#: elfxx-mips.c:6756 elfxx-mips.c:6979 +msgid "%B: Warning: bad `%s' option size %u smaller than its header" +msgstr "%B: Varning: felaktig ”%s” alternativstorlek %u mindre än dess huvud" + +#: elfxx-mips.c:7734 elfxx-mips.c:7859 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "%B: Varning: kan inte avgöra destinationsfunktionen för stubbsektionen ”%s”" + +#: elfxx-mips.c:7990 +msgid "%B: Malformed reloc detected for section %s" +msgstr "%B: Felformad omlokalisering hittad för sektion %s" + +#: elfxx-mips.c:8065 +msgid "%B: GOT reloc at 0x%lx not expected in executables" +msgstr "%B: GOT omlokalisering vid 0x%lx förväntas inte i körbara filer" + +#: elfxx-mips.c:8199 +msgid "%B: CALL16 reloc at 0x%lx not against global symbol" +msgstr "%B: CALL16-omlokalisering vid 0x%lx inte mot global symbol" + +#: elfxx-mips.c:8977 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "icke-dynamiska omlokaliseringar använder dynamisk symbol %s" + +#: elfxx-mips.c:9877 +msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'" +msgstr "%B: Kan inte hitta passande LO16-omlokalisering mot ”%s” för %s vid 0x%lx i sektion ”%A”" + +#: elfxx-mips.c:10016 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "small-data-sektion överstiger 64Kb; minska small-data-storleksgräns (se flaggan -G)" + +#: elfxx-mips.c:10035 +msgid "JALX to a non-word-aligned address" +msgstr "JALX till en ej ordjusterad adress" + +#: elfxx-mips.c:10402 elfxx-mips.c:10966 +msgid "%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC" +msgstr "%B: ”%A” förskjutning pÃ¥ %ld frÃ¥n ”%A” bortom intervallet för ADDIUPC" + +#: elfxx-mips.c:13990 +#, c-format +msgid "%s: illegal section name `%s'" +msgstr "%s: ogiltigt sektionsnamn ”%s”" + +#: elfxx-mips.c:14375 elfxx-mips.c:14381 elfxx-mips.c:14387 elfxx-mips.c:14407 +#: elfxx-mips.c:14413 elfxx-mips.c:14419 elfxx-mips.c:14441 elfxx-mips.c:14460 +#: elfxx-mips.c:14467 elfxx-mips.c:14474 +msgid "Warning: %B uses %s (set by %B), %B uses %s" +msgstr "Varning: %B använder %s (satt av %B), %B använder %s" + +#: elfxx-mips.c:14394 elfxx-mips.c:14426 elfxx-mips.c:14447 elfxx-mips.c:14480 +msgid "Warning: %B uses %s (set by %B), %B uses unknown floating point ABI %d" +msgstr "Varning: %B använder %s (satt av %B), %B använder okänd flyttals-ABI %d" + +#: elfxx-mips.c:14493 elfxx-mips.c:14501 elfxx-mips.c:14509 elfxx-mips.c:14517 +msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses %s" +msgstr "Varning: %B använder okänt flyttals-ABI %d (satt av %B), %B använder %s" + +#: elfxx-mips.c:14525 +msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses unknown floating point ABI %d" +msgstr "Varning: %B använder okänt flyttals-ABI %d (satt av %B), %B använder okänd flyttals-ABI %d" + +#: elfxx-mips.c:14548 +msgid "Warning: %B uses %s (set by %B), %B uses unknown MSA ABI %d" +msgstr "Varning: %B använder %s (satt av %B), %B använder MSA-ABI %d" + +#: elfxx-mips.c:14559 +msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses %s" +msgstr "Varning: %B använder okänt MSA-ABI %d (satt av %B), %B använder %s" + +#: elfxx-mips.c:14567 +msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses unknown MSA ABI %d" +msgstr "Varning: %B använder okänt MSA-ABI %d (satt av %B), %B använder okänd MSA-ABI %d" + +#: elfxx-mips.c:14599 +msgid "%B: endianness incompatible with that of the selected emulation" +msgstr "%B: bitordning inkompatibel med vald emulering" + +#: elfxx-mips.c:14610 +msgid "%B: ABI is incompatible with that of the selected emulation" +msgstr "%B: ABI är inkompatibelt med vald emulering" + +#: elfxx-mips.c:14694 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "%B: varning: länkar abicalls-filer till icke-abicalls-filer" + +#: elfxx-mips.c:14711 +msgid "%B: linking 32-bit code with 64-bit code" +msgstr "%B: länkar 32-bitars kod till 64-bitars kod" + +#: elfxx-mips.c:14739 elfxx-mips.c:14802 +msgid "%B: linking %s module with previous %s modules" +msgstr "%B: länkar %s-modul till tidigare %s-moduler" + +#: elfxx-mips.c:14762 +msgid "%B: ABI mismatch: linking %s module with previous %s modules" +msgstr "%B: ABI felmatchning: länkar %s-modul till tidigare %s-moduler" + +#: elfxx-mips.c:14786 +msgid "%B: ASE mismatch: linking %s module with previous %s modules" +msgstr "%B: ASE-felmatchning: länkning av %s med tidigare %s moduler" + +#: elfxx-mips.c:14958 +#, c-format +msgid " [abi=O32]" +msgstr " [abi=O32]" + +#: elfxx-mips.c:14960 +#, c-format +msgid " [abi=O64]" +msgstr " [abi=O64]" + +#: elfxx-mips.c:14962 +#, c-format +msgid " [abi=EABI32]" +msgstr " [abi=EABI32]" + +#: elfxx-mips.c:14964 +#, c-format +msgid " [abi=EABI64]" +msgstr " [abi=EABI64]" + +#: elfxx-mips.c:14966 +#, c-format +msgid " [abi unknown]" +msgstr " [okänt abi]" + +#: elfxx-mips.c:14968 +#, c-format +msgid " [abi=N32]" +msgstr " [abi=N32]" + +#: elfxx-mips.c:14970 +#, c-format +msgid " [abi=64]" +msgstr " [abi=64]" + +#: elfxx-mips.c:14972 +#, c-format +msgid " [no abi set]" +msgstr " [inget abi inställt]" + +#: elfxx-mips.c:14993 +#, c-format +msgid " [unknown ISA]" +msgstr " [okänd ISA]" + +#: elfxx-mips.c:15013 +#, c-format +msgid " [not 32bitmode]" +msgstr " [inte 32-bitarsläge]" + +#: elfxx-sparc.c:640 +#, c-format +msgid "invalid relocation type %d" +msgstr "ogiltig omlokaliseringstyp %d" + +#: elfxx-tilegx.c:4433 +msgid "%B: Cannot link together %s and %s objects." +msgstr "%B: Kan inte länka samman objekten %s och %s." + +#: i386linux.c:418 m68klinux.c:421 sparclinux.c:414 +#, c-format +msgid "Output file requires shared library `%s'\n" +msgstr "Utdatafilen kräver delade biblioteket ”%s”\n" + +#: i386linux.c:426 m68klinux.c:429 sparclinux.c:422 +#, c-format +msgid "Output file requires shared library `%s.so.%s'\n" +msgstr "Utdatafilen kräver delade biblioteket ”%s.so.%s”\n" + +#: i386linux.c:613 i386linux.c:663 m68klinux.c:618 m68klinux.c:666 +#: sparclinux.c:609 sparclinux.c:659 +#, c-format +msgid "Symbol %s not defined for fixups\n" +msgstr "Symbolen %s är inte definierad för fixar\n" + +#: i386linux.c:687 m68klinux.c:690 sparclinux.c:683 +msgid "Warning: fixup count mismatch\n" +msgstr "Varning: antalet fixar stämmer inte\n" + +#: ieee.c:158 +#, c-format +msgid "%s: string too long (%d chars, max 65535)" +msgstr "%s: strängen är för lÃ¥ng (%d tecken, max 65535)" + +#: ieee.c:285 +#, c-format +msgid "%s: unrecognized symbol `%s' flags 0x%x" +msgstr "%s: okänd symbol ”%s” flaggor 0x%x" + +#: ieee.c:791 +msgid "%B: unimplemented ATI record %u for symbol %u" +msgstr "%B: ej implementerad ATI-post %u för symbol %u" + +#: ieee.c:815 +msgid "%B: unexpected ATN type %d in external part" +msgstr "%B: oväntad ATN-typ %d i extern del" + +#: ieee.c:837 +msgid "%B: unexpected type after ATN" +msgstr "%B: oväntad typ efter ATN" + +#: ihex.c:230 +msgid "%B:%d: unexpected character `%s' in Intel Hex file" +msgstr "%B:%d: oväntat tecken ”%s” i Intel Hex-fil" + +#: ihex.c:337 +msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" +msgstr "%B:%u: felaktig kontrollsumma i Intel Hex-fil (förväntade mig %u, hittade %u)" + +#: ihex.c:392 +msgid "%B:%u: bad extended address record length in Intel Hex file" +msgstr "%B:%u: felaktig utökad adresspostlängd i Intel Hex-fil" + +#: ihex.c:409 +msgid "%B:%u: bad extended start address length in Intel Hex file" +msgstr "%B:%u: felaktig utökad startadresslängd i Intel Hex-fil" + +#: ihex.c:426 +msgid "%B:%u: bad extended linear address record length in Intel Hex file" +msgstr "%B:%u: felaktig linjär adresspostlängd i Intel Hex-fil" + +#: ihex.c:443 +msgid "%B:%u: bad extended linear start address length in Intel Hex file" +msgstr "%B:%u: felaktig utökad linjär startadresslängd i Intel Hex-fil" + +#: ihex.c:460 +msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" +msgstr "%B:%u: okänd ihex-typ %u i Intel Hex-fil" + +#: ihex.c:579 +msgid "%B: internal error in ihex_read_section" +msgstr "%B: internt fel i ihex_read_section" + +#: ihex.c:613 +msgid "%B: bad section length in ihex_read_section" +msgstr "%B: felaktig sektionslängd i ihex_read_section" + +#: ihex.c:826 +#, c-format +msgid "%s: address 0x%s out of range for Intel Hex file" +msgstr "%s: adressen 0x%s är utanför intervallet för hexadecimal Intel-fil" + +#: libbfd.c:863 +msgid "%B: unable to get decompressed section %A" +msgstr "%B: kunde inte hämta dekomprimerad sektion %A" + +#: libbfd.c:1012 +msgid "%B: compiled for a big endian system and target is little endian" +msgstr "%B: kompilerat för system med rak byteordning, medan destinationen är omvänd byteordning" + +#: libbfd.c:1014 +msgid "%B: compiled for a little endian system and target is big endian" +msgstr "%B: kompilerat för system med omvänd byteordning, medan destinationen är rak byteordning" + +#: libbfd.c:1043 +#, c-format +msgid "Deprecated %s called at %s line %d in %s\n" +msgstr "FörÃ¥ldrad %s anropad vid %s rad %d i %s\n" + +#: libbfd.c:1046 +#, c-format +msgid "Deprecated %s called\n" +msgstr "FörÃ¥ldrad %s anropad\n" + +#: linker.c:1873 +msgid "%B: indirect symbol `%s' to `%s' is a loop" +msgstr "%B: indirekt symbol ”%s” till ”%s” är en slinga" + +#: linker.c:2750 +#, c-format +msgid "Attempt to do relocatable link with %s input and %s output" +msgstr "Försök att göra en omlokaliseringsbar länk med %s-indata och %s-utdata" + +#: linker.c:3035 +msgid "%B: ignoring duplicate section `%A'\n" +msgstr "%B: ignorerar dubblerad sektion ”%A”\n" + +#: linker.c:3044 linker.c:3053 +msgid "%B: duplicate section `%A' has different size\n" +msgstr "%B: dubblerad sektion ”%A” har en annan storlek\n" + +#: linker.c:3061 linker.c:3066 +msgid "%B: could not read contents of section `%A'\n" +msgstr "%B: kunde inte läsa innehÃ¥llet i sektion ”%A”\n" + +#: linker.c:3070 +msgid "%B: duplicate section `%A' has different contents\n" +msgstr "%B: dubblerad sektion ”%A” har olika innehÃ¥ll\n" + +#: mach-o.c:648 +msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" +msgstr "bfd_mach_o_canonicalize_symtab: kunde inte ladda symboler" + +#: mach-o.c:1918 +#, c-format +msgid "mach-o: there are too many sections (%d) maximum is 255,\n" +msgstr "mach-o: det finns för mÃ¥nga sektion (%d) maximalt är 255,\n" + +#: mach-o.c:2017 +#, c-format +msgid "unable to write unknown load command 0x%lx" +msgstr "kunde inte skriva okänt laddningskommando 0x%lx" + +#: mach-o.c:2272 +msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." +msgstr "tyvärr: modtab, toc och extrefsyms är ännu inte implementerade för dysymtab-kommandon." + +#: mach-o.c:2898 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %lu" +msgstr "bfd_mach_o_read_symtab_symbol: kunde inte läsa %d byte vid %lu" + +#: mach-o.c:2916 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %lu)" +msgstr "bfd_mach_o_read_symtab_symbol: namn utanför intervallet (%lu >= %lu)" + +#: mach-o.c:2997 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined" +msgstr "bfd_mach_o_read_symtab_symbol: symbol ”%s” angav ogiltig sektion %d (max %lu): ställer in som odefinierad" + +#: mach-o.c:3013 +#, c-format +msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined" +msgstr "bfd_mach_o_read_symtab_symbol: symbol ”%s” angav ogiltigt typfält 0x%x: ställer in som odefinierad" + +#: mach-o.c:3085 +msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" +msgstr "bfd_mach_o_read_symtab_symbols: kunde inte allokera minne för symboler" + +#: mach-o.c:3915 +msgid "%B: unknown load command 0x%lx" +msgstr "%B: okänt inläst kommando 0x%lx" + +#: mach-o.c:4107 +#, c-format +msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" +msgstr "bfd_mach_o_scan: okänd arkitektur 0x%lx/0x%lx" + +#: mach-o.c:4204 +#, c-format +msgid "unknown header byte-order value 0x%lx" +msgstr "okänt byte-ordningsvärde i huvudet; 0x%lx" + +#: merge.c:832 +#, c-format +msgid "%s: access beyond end of merged section (%ld)" +msgstr "%s: Ã¥tkomst bortom slutet av sammanfogad sektion (%ld)" + +#: mmo.c:455 +#, c-format +msgid "%s: No core to allocate section name %s\n" +msgstr "%s: Ingen kärna för att allokera sektionsnamn %s\n" + +#: mmo.c:530 +#, c-format +msgid "%s: No core to allocate a symbol %d bytes long\n" +msgstr "%s: Ingen kärna för att allokera en %d byte lÃ¥ng symbol\n" + +#: mmo.c:1189 +#, c-format +msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" +msgstr "%s: ogiltig mmo-fil: initieringsvärde för $255 är inte ”Main”\n" + +#: mmo.c:1334 +#, c-format +msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" +msgstr "%s: bred teckensekvens som inte stöds 0x%02X 0x%02X efter symbolnamnet som börjar med ”%s”\n" + +#: mmo.c:1568 +#, c-format +msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" +msgstr "%s: ogiltig mmo-fil: lopkod ”%d” stöds inte\n" + +#: mmo.c:1578 +#, c-format +msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" +msgstr "%s: ogiltig mmo-fil: förväntade YZ = 1 fick YZ = %d för lop_quote\n" + +#: mmo.c:1614 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" +msgstr "%s: ogiltig mmo-fil: förväntade z = 1 eller z = 2, fick z = %d för lop_loc\n" + +#: mmo.c:1660 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" +msgstr "%s: ogiltig mmo-fil: förväntade z = 1 eller z = 2, fick z = %d för lop_fixo\n" + +#: mmo.c:1699 +#, c-format +msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" +msgstr "%s: ogiltig mmo-fil: förväntade y = 0, fick y = %d för lop_fixrx\n" + +#: mmo.c:1708 +#, c-format +msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" +msgstr "%s: ogiltig mmo-fil: förväntade z = 16 eller z = 24, fick z = %d för lop_fixrx\n" + +#: mmo.c:1731 +#, 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: ogiltig mmo-fil: inledande byte i operandord mÃ¥ste vara 0 eller 1, fick %d för lop_fixrx\n" + +#: mmo.c:1754 +#, c-format +msgid "%s: cannot allocate file name for file number %d, %d bytes\n" +msgstr "%s: kan inte allokera filnamn för fil nummer %d, %d byte\n" + +#: mmo.c:1774 +#, c-format +msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n" +msgstr "%s: ogiltig mmo-fil: fil nummer %d ”%s”, var redan angiven som ”%s”\n" + +#: mmo.c:1787 +#, c-format +msgid "%s: invalid mmo file: file name for number %d was not specified before use\n" +msgstr "%s: ogiltig mmo-fil: filnamnet för nummer %d angavs inte innan användning\n" + +#: mmo.c:1893 +#, c-format +msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" +msgstr "%s: ogiltig mmo-fil: fälten y och z i lop_stab är icke-tomma, y: %d, z: %d\n" + +#: mmo.c:1929 +#, c-format +msgid "%s: invalid mmo file: lop_end not last item in file\n" +msgstr "%s: ogiltig mmo-fil: lop_end är inte sista objektet i fil\n" + +#: mmo.c:1942 +#, 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: ogiltig mmo-fil: YZ i lop_end (%ld) är inte lika med antalet tetra till den föregÃ¥ende lop_stab (%ld)\n" + +#: mmo.c:2652 +#, c-format +msgid "%s: invalid symbol table: duplicate symbol `%s'\n" +msgstr "%s: ogiltig symboltabell: dubblettsymbol ”%s”\n" + +#: mmo.c:2892 +#, c-format +msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" +msgstr "%s: Felaktig symboldefinition: ”Main” är inställd till %s istället för startadressen %s\n" + +#: mmo.c:2984 +#, 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: varning: symboltabellen är för stor för mmo, större än 65535 32-bitars ord: %d. Endast ”Main” kommer att skickas.\n" + +#: mmo.c:3029 +#, c-format +msgid "%s: internal error, symbol table changed size from %d to %d words\n" +msgstr "%s: internt fel, symboltabellen ändrade storlek frÃ¥n %d till %d ord\n" + +#: mmo.c:3081 +#, c-format +msgid "%s: internal error, internal register section %s had contents\n" +msgstr "%s: internt fel, interna registersektionen %s hade innehÃ¥ll\n" + +#: mmo.c:3132 +#, c-format +msgid "%s: no initialized registers; section length 0\n" +msgstr "%s: inga initierade register; sektionslängd 0\n" + +#: mmo.c:3138 +#, c-format +msgid "%s: too many initialized registers; section length %ld\n" +msgstr "%s: för mÃ¥nga initierade register; sektionslängd %ld\n" + +#: mmo.c:3143 +#, c-format +msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" +msgstr "%s: ogiltig startadress för initierade register med längden %ld: 0x%lx%08lx\n" + +#: oasys.c:881 +#, c-format +msgid "%s: can not represent section `%s' in oasys" +msgstr "%s: kan inte representera sektionen ”%s” i oasys" + +#: osf-core.c:128 +#, c-format +msgid "Unhandled OSF/1 core file section type %d\n" +msgstr "Ohanterad sektionstyp %d för OSF/1-minnesfil\n" + +#: pe-mips.c:607 +msgid "%B: `ld -r' not supported with PE MIPS objects\n" +msgstr "%B: ”ld -r” stöds inte för PE MIPS-objekt\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:719 +msgid "%B: unimplemented %s\n" +msgstr "%B: oimplementerad %s\n" + +#: pe-mips.c:745 +msgid "%B: jump too far away\n" +msgstr "%B: hopp för lÃ¥ngt\n" + +#: pe-mips.c:771 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "%B: felaktigt pair/reflo efter refhi\n" + +#: pef.c:522 +#, c-format +msgid "bfd_pef_scan: unknown architecture 0x%lx" +msgstr "bfd_pef_scan: okänd arkitektur 0x%lx" + +#: pei-x86_64.c:469 +#, c-format +msgid "warning: .pdata section size (%ld) is not a multiple of %d\n" +msgstr "varning: .pdata-sektionsstorlek (%ld) är inte en multiplikator av %d\n" + +#: pei-x86_64.c:474 peigen.c:1626 peigen.c:1809 pepigen.c:1626 pepigen.c:1809 +#: pex64igen.c:1626 pex64igen.c:1809 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" +"\n" +"Funktionstabellen (tolkade innehÃ¥ll frÃ¥n .pdata-sektionen)\n" + +#: pei-x86_64.c:476 +#, c-format +msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" +msgstr "vma:\t\t\tStartadress\t Slutadress\t Unwinddata\n" + +#. XXX code yet to be written. +#: peicode.h:758 +msgid "%B: Unhandled import type; %x" +msgstr "%B: Ohanterad importtyp; %x" + +#: peicode.h:763 +msgid "%B: Unrecognised import type; %x" +msgstr "%B Okänd importtyp; %x" + +#: peicode.h:777 +msgid "%B: Unrecognised import name type; %x" +msgstr "%B: Okänd importnamnstyp; %x" + +#: peicode.h:1173 +msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" +msgstr "%B: Okänd maskintyp (0x%x) i Importbiblioteksformatarkivet" + +#: peicode.h:1185 +msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" +msgstr "%B: Känd men ohanterad maskintyp (0x%x) i importbiblioteksformatarkivet" + +#: peicode.h:1203 +msgid "%B: size field is zero in Import Library Format header" +msgstr "%B: storleksfältet är noll i importbiblioteksformathuvudet" + +#: peicode.h:1234 +msgid "%B: string not null terminated in ILF object file." +msgstr "%B: sträng som inte är nollavslutad i ILF-objektfil." + +#: ppcboot.c:391 +#, c-format +msgid "" +"\n" +"ppcboot header:\n" +msgstr "" +"\n" +"ppcboot-huvud:\n" + +#: ppcboot.c:392 +#, c-format +msgid "Entry offset = 0x%.8lx (%ld)\n" +msgstr "StartavstÃ¥nd = 0x%.8lx (%ld)\n" + +#: ppcboot.c:394 +#, c-format +msgid "Length = 0x%.8lx (%ld)\n" +msgstr "Längd = 0x%.8lx (%ld)\n" + +#: ppcboot.c:398 +#, c-format +msgid "Flag field = 0x%.2x\n" +msgstr "Flaggfält = 0x%.2x\n" + +#: ppcboot.c:404 +#, c-format +msgid "Partition name = \"%s\"\n" +msgstr "Partitionsnamn = ”%s”\n" + +#: ppcboot.c:423 +#, c-format +msgid "" +"\n" +"Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "" +"\n" +"Start pÃ¥ partition[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:429 +#, c-format +msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "Slut pÃ¥ partition[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:435 +#, c-format +msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" +msgstr "Sektor för partition[%d] = 0x%.8lx (%ld)\n" + +#: ppcboot.c:437 +#, c-format +msgid "Partition[%d] length = 0x%.8lx (%ld)\n" +msgstr "Längd pÃ¥ partition[%d] = 0x%.8lx (%ld)\n" + +#: reloc.c:7371 +msgid "INPUT_SECTION_FLAGS are not supported.\n" +msgstr "INPUT_SECTION_FLAGS stöds ej.\n" + +#: reloc.c:7526 +msgid "%X%P: %B(%A): relocation \"%R\" goes out of range\n" +msgstr "%X%P: %B(%A): omlokaliseringen ”%R” gÃ¥r utanför intervallet\n" + +#: rs6000-core.c:448 +#, c-format +msgid "%s: warning core file truncated" +msgstr "%s: varning: kärnfil avkortad" + +#: som.c:5471 +#, c-format +msgid "" +"\n" +"Exec Auxiliary Header\n" +msgstr "" +"\n" +"Kör hjälphuvud\n" + +#: som.c:5776 +msgid "som_sizeof_headers unimplemented" +msgstr "som_sizeof_headers är inte implementerat" + +#: srec.c:261 +msgid "%B:%d: Unexpected character `%s' in S-record file\n" +msgstr "%B:%d: Oväntat tecken ”%s” i S-postfil\n" + +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "%B:%d: Felaktig kontrollsumma i S-postfil\n" + +#: stabs.c:279 +msgid "%B(%A+0x%lx): Stabs entry has invalid string index." +msgstr "%B(%A+0x%lx): Stabs-post har ogiltigt strängindex." + +#: syms.c:1079 +msgid "Unsupported .stab relocation" +msgstr ".stab-omlokalisering som inte stöds" + +#: vms-alpha.c:1294 +#, c-format +msgid "Unknown EGSD subtype %d" +msgstr "Okänd EGSD-deltyp %d" + +#: vms-alpha.c:1325 +#, c-format +msgid "Stack overflow (%d) in _bfd_vms_push" +msgstr "Stacken ger överspill (%d) i _bfd_vms_push" + +#: vms-alpha.c:1338 +msgid "Stack underflow in _bfd_vms_pop" +msgstr "Stacken ger underspill i _bfd_vms_pop" + +#. These names have not yet been added to this switch statement. +#: vms-alpha.c:1575 +#, c-format +msgid "unknown ETIR command %d" +msgstr "okänt ETIR-kommando %d" + +#: vms-alpha.c:1762 +#, c-format +msgid "bad section index in %s" +msgstr "felaktigt sektionsindex i %s" + +#: vms-alpha.c:1775 +#, c-format +msgid "unsupported STA cmd %s" +msgstr "STA-kommando %s stöds inte" + +#. Insert field. +#. Unsigned shift. +#. Rotate. +#. Redefine symbol to current location. +#. Define a literal. +#: vms-alpha.c:1951 vms-alpha.c:1982 vms-alpha.c:2229 +#, c-format +msgid "%s: not supported" +msgstr "%s: stöds inte" + +#: vms-alpha.c:1957 +#, c-format +msgid "%s: not implemented" +msgstr "%s: inte implementerad" + +#: vms-alpha.c:2213 +#, c-format +msgid "invalid use of %s with contexts" +msgstr "ogiltig användning av %s med sammanhang" + +#: vms-alpha.c:2247 +#, c-format +msgid "reserved cmd %d" +msgstr "reserverat cmd %d" + +#: vms-alpha.c:2332 +msgid "Object module NOT error-free !\n" +msgstr "Objektmodulen INTE felfri!\n" + +#: vms-alpha.c:3657 +#, c-format +msgid "SEC_RELOC with no relocs in section %s" +msgstr "SEC_RELOC utan omlokaliseringar i sektion %s" + +#: vms-alpha.c:3709 vms-alpha.c:3922 +#, c-format +msgid "Size error in section %s" +msgstr "Storleksfel i sektion %s" + +#: vms-alpha.c:3868 +msgid "Spurious ALPHA_R_BSR reloc" +msgstr "Oriktig ALPHA_R_BSR-omlokalisering" + +#: vms-alpha.c:3909 +#, c-format +msgid "Unhandled relocation %s" +msgstr "Ohanterad omlokalisering %s" -#: elf32-ppc.c:5539 +#: vms-alpha.c:4199 #, c-format -msgid "%s: relocation %s is not yet supported for symbol %s." -msgstr "%s: omlokaliseringen %s stöds inte än för symbolen %s." +msgid "unknown source command %d" +msgstr "okänt källkommando %d" + +#: vms-alpha.c:4260 +msgid "DST__K_SET_LINUM_INCR not implemented" +msgstr "DST__K_SET_LINUM_INCR inte implementerad" + +#: vms-alpha.c:4266 +msgid "DST__K_SET_LINUM_INCR_W not implemented" +msgstr "DST__K_SET_LINUM_INCR_W inte implementerad" + +#: vms-alpha.c:4272 +msgid "DST__K_RESET_LINUM_INCR not implemented" +msgstr "DST__K_RESET_LINUM_INCR inte implementerad" + +#: vms-alpha.c:4278 +msgid "DST__K_BEG_STMT_MODE not implemented" +msgstr "DST__K_BEG_STMT_MODE inte implementerad" + +#: vms-alpha.c:4284 +msgid "DST__K_END_STMT_MODE not implemented" +msgstr "DST__K_END_STMT_MODE inte implementerad" + +#: vms-alpha.c:4311 +msgid "DST__K_SET_PC not implemented" +msgstr "DST__K_SET_PC inte implementerad" -#: elf32-ppc.c:5594 elf64-ppc.c:8461 +#: vms-alpha.c:4317 +msgid "DST__K_SET_PC_W not implemented" +msgstr "DST__K_SET_PC_W inte implementerad" + +#: vms-alpha.c:4323 +msgid "DST__K_SET_PC_L not implemented" +msgstr "DST__K_SET_PC_L inte implementerad" + +#: vms-alpha.c:4329 +msgid "DST__K_SET_STMTNUM not implemented" +msgstr "DST__K_SET_STMTNUM inte implementerad" + +#: vms-alpha.c:4372 #, c-format -msgid "%s(%s+0x%lx): unresolvable %s relocation against symbol `%s'" -msgstr "%s(%s+0x%lx): olöslig %s-omlokalisering mot symbolen \"%s\"" +msgid "unknown line command %d" +msgstr "okänt radkommando %d" -#: elf32-ppc.c:5644 elf64-ppc.c:8507 +#: vms-alpha.c:4846 vms-alpha.c:4863 vms-alpha.c:4877 vms-alpha.c:4892 +#: vms-alpha.c:4904 vms-alpha.c:4915 vms-alpha.c:4927 #, c-format -msgid "%s(%s+0x%lx): %s reloc against `%s': error %d" -msgstr "%s(%s+0x%lx): %s-omlokalisering mot \"%s\": fel %d" +msgid "Unknown reloc %s + %s" +msgstr "Okänd omlokalisering %s + %s" -#: elf32-ppc.c:5888 +#: vms-alpha.c:4982 #, c-format -msgid "corrupt or empty %s section in %s" -msgstr "trasig eller tom %s-sektion i %s" +msgid "Unknown reloc %s" +msgstr "Okänd omlokalisering %s" + +#: vms-alpha.c:4995 +msgid "Invalid section index in ETIR" +msgstr "Ogiltigt sektionsindex i ETIR" -#: elf32-ppc.c:5895 +#: vms-alpha.c:5002 +msgid "Relocation for non-REL psect" +msgstr "Omlokalisering för icke-REL psect" + +#: vms-alpha.c:5049 #, c-format -msgid "unable to read in %s section from %s" -msgstr "kan inte läsa in %s-sektion från %s" +msgid "Unknown symbol in command %s" +msgstr "Okänd symbol i kommando %s" -#: elf32-ppc.c:5901 +#: vms-alpha.c:5564 #, c-format -msgid "corrupt %s section in %s" -msgstr "trasig %s-sektion i %s" +msgid " EMH %u (len=%u): " +msgstr " EMH %u (len=%u): " -#: elf32-ppc.c:5944 +#: vms-alpha.c:5573 #, c-format -msgid "warning: unable to set size of %s section in %s" -msgstr "varning: kan inte ställa in storleken för sektionen %s i %s" +msgid "Module header\n" +msgstr "Modulhuvud\n" -#: elf32-ppc.c:5994 -msgid "failed to allocate space for new APUinfo section." -msgstr "misslyckades med att allokera utrymme för ny APUinfo-sektion." +#: vms-alpha.c:5574 +#, c-format +msgid " structure level: %u\n" +msgstr " strukturnivÃ¥: %u\n" -#: elf32-ppc.c:6013 -msgid "failed to compute new APUinfo section." -msgstr "misslyckades med att beräkna ny APUinfo-sektion." +#: vms-alpha.c:5575 +#, c-format +msgid " max record size: %u\n" +msgstr " max poststorlek: %u\n" -#: elf32-ppc.c:6016 -msgid "failed to install new APUinfo section." -msgstr "misslyckades med att installera ny APUinfo-sektion." +#: vms-alpha.c:5578 +#, c-format +msgid " module name : %.*s\n" +msgstr " modulnamn : %.*s\n" -#: elf32-s390.c:2256 elf64-s390.c:2226 +#: vms-alpha.c:5580 #, c-format -msgid "%s(%s+0x%lx): invalid instruction for TLS relocation %s" -msgstr "%s(%s+0x%lx): ogiltig instruktion för TLS-omlokalisering %s" +msgid " module version : %.*s\n" +msgstr " modulversion: %.*s\n" -#: elf32-sh.c:2103 +#: vms-alpha.c:5582 #, c-format -msgid "%s: 0x%lx: warning: bad R_SH_USES offset" -msgstr "%s: 0x%lx: varning: felaktigt R_SH_USES-avstånd" +msgid " compile date : %.17s\n" +msgstr " kompileringsdatum: %.17s\n" -#: elf32-sh.c:2115 +#: vms-alpha.c:5587 #, c-format -msgid "%s: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" -msgstr "%s: 0x%lx: varning: R_SH_USES pekar till okänd instruktion 0x%x" +msgid "Language Processor Name\n" +msgstr "SprÃ¥kbehandlarens namn\n" -#: elf32-sh.c:2132 +#: vms-alpha.c:5588 #, c-format -msgid "%s: 0x%lx: warning: bad R_SH_USES load offset" -msgstr "%s: 0x%lx: varning: felaktigt R_SH_USES-inläsningsavstånd" +msgid " language name: %.*s\n" +msgstr " sprÃ¥knamn: %.*s\n" -#: elf32-sh.c:2147 +#: vms-alpha.c:5595 #, c-format -msgid "%s: 0x%lx: warning: could not find expected reloc" -msgstr "%s: 0x%lx: varning: kunde inte hitta förväntad omlokalisering" +msgid "Source Files Header\n" +msgstr "Källkodsfilers huvud\n" -#: elf32-sh.c:2175 +#: vms-alpha.c:5596 #, c-format -msgid "%s: 0x%lx: warning: symbol in unexpected section" -msgstr "%s: 0x%lx: varning: symbol i oväntad sektion" +msgid " file: %.*s\n" +msgstr " fil: %.*s\n" -#: elf32-sh.c:2300 +#: vms-alpha.c:5603 #, c-format -msgid "%s: 0x%lx: warning: could not find expected COUNT reloc" -msgstr "%s: 0x%lx: varning: kunde inte hitta förväntad COUNT-omlokalisering" +msgid "Title Text Header\n" +msgstr "Titeltexthuvud\n" -#: elf32-sh.c:2309 +#: vms-alpha.c:5604 #, c-format -msgid "%s: 0x%lx: warning: bad count" -msgstr "%s: 0x%lx: varning: felaktigt antal" +msgid " title: %.*s\n" +msgstr " titel: %.*s\n" -#: elf32-sh.c:2712 elf32-sh.c:3088 +#: vms-alpha.c:5611 #, c-format -msgid "%s: 0x%lx: fatal: reloc overflow while relaxing" -msgstr "%s: 0x%lx: ödesdigert: omlokalisering ger överspill vid förenklingen" +msgid "Copyright Header\n" +msgstr "Upphovsrättshuvud\n" -#: elf32-sh.c:4654 elf64-sh64.c:1585 -msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "Oväntat STO_SH5_ISA32 på lokal symbol hanteras inte" +#: vms-alpha.c:5612 +#, c-format +msgid " copyright: %.*s\n" +msgstr " upphovsrätt: %.*s\n" -#: elf32-sh.c:4809 +#: vms-alpha.c:5618 #, c-format -msgid "%s: unresolvable relocation against symbol `%s' from %s section" -msgstr "%s: olöslig omlokalisering mot symbolen \"%s\" från sektionen %s" +msgid "unhandled emh subtype %u\n" +msgstr "ohanterad emh-deltyp %u\n" -#: elf32-sh.c:4881 +#: vms-alpha.c:5628 #, c-format -msgid "%s: 0x%lx: fatal: unaligned branch target for relax-support relocation" -msgstr "%s: 0x%lx: ödesdigert: ojusterat grenmål för omlokalisering för förenklingsstöd" +msgid " EEOM (len=%u):\n" +msgstr " EEOM (len=%u):\n" -#: elf32-sh.c:6627 elf64-alpha.c:4848 +#: vms-alpha.c:5629 #, c-format -msgid "%s: TLS local exec code cannot be linked into shared objects" -msgstr "%s: lokal TLS-exekveringskod kan inte länkas in i delade objekt" +msgid " number of cond linkage pairs: %u\n" +msgstr " antal cond-länkningspar: %u\n" -#: elf32-sh64.c:221 elf64-sh64.c:2407 +#: vms-alpha.c:5631 #, c-format -msgid "%s: compiled as 32-bit object and %s is 64-bit" -msgstr "%s: kompilerat som 32-bitarsobjekt och %s är 64-bitars" +msgid " completion code: %u\n" +msgstr " slutförandekod: %u\n" -#: elf32-sh64.c:224 elf64-sh64.c:2410 +#: vms-alpha.c:5635 #, c-format -msgid "%s: compiled as 64-bit object and %s is 32-bit" -msgstr "%s: kompilerat som 64-bitarsobjekt och %s är 32-bitars" +msgid " transfer addr flags: 0x%02x\n" +msgstr " överför addr-flaggor: 0x%02x\n" -#: elf32-sh64.c:226 elf64-sh64.c:2412 +#: vms-alpha.c:5636 #, c-format -msgid "%s: object size does not match that of target %s" -msgstr "%s: objektstorleken stämmer inte överens med den hos målet %s" +msgid " transfer addr psect: %u\n" +msgstr " överför addr psect: %u\n" -#: elf32-sh64.c:461 elf64-sh64.c:2990 +#: vms-alpha.c:5638 #, c-format -msgid "%s: encountered datalabel symbol in input" -msgstr "%s: påträffade dataetikettssymbol i indata" +msgid " transfer address : 0x%08x\n" +msgstr " överför adress : 0x%08x\n" -#: elf32-sh64.c:544 -msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" -msgstr "PTB passar inte: en SHmedia-adress (bit 0 == 1)" +#: vms-alpha.c:5647 +msgid " WEAK" +msgstr " SVAG" -#: elf32-sh64.c:547 -msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" -msgstr "PTA passar inte: en SHcompact-adress (bit 0 == 0)" +#: vms-alpha.c:5649 +msgid " DEF" +msgstr " DEF" + +#: vms-alpha.c:5651 +msgid " UNI" +msgstr " UNI" + +#: vms-alpha.c:5653 vms-alpha.c:5674 +msgid " REL" +msgstr " REL" + +#: vms-alpha.c:5655 +msgid " COMM" +msgstr " KOMM" -#: elf32-sh64.c:565 +#: vms-alpha.c:5657 +msgid " VECEP" +msgstr " VECEP" + +#: vms-alpha.c:5659 +msgid " NORM" +msgstr " NORM" + +#: vms-alpha.c:5661 +msgid " QVAL" +msgstr " QVAL" + +#: vms-alpha.c:5668 +msgid " PIC" +msgstr " PIC" + +#: vms-alpha.c:5670 +msgid " LIB" +msgstr " LIB" + +#: vms-alpha.c:5672 +msgid " OVR" +msgstr " OVR" + +#: vms-alpha.c:5676 +msgid " GBL" +msgstr " GBL" + +#: vms-alpha.c:5678 +msgid " SHR" +msgstr " SHR" + +#: vms-alpha.c:5680 +msgid " EXE" +msgstr " EXE" + +#: vms-alpha.c:5682 +msgid " RD" +msgstr " LÄS" + +#: vms-alpha.c:5684 +msgid " WRT" +msgstr " SKR" + +#: vms-alpha.c:5686 +msgid " VEC" +msgstr " VEK" + +#: vms-alpha.c:5688 +msgid " NOMOD" +msgstr " NOMOD" + +#: vms-alpha.c:5690 +msgid " COM" +msgstr " COM" + +#: vms-alpha.c:5692 +msgid " 64B" +msgstr " 64B" + +#: vms-alpha.c:5701 #, c-format -msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" -msgstr "%s: GAS-fel: oväntad PTB-instruktion med R_SH_PT_16" +msgid " EGSD (len=%u):\n" +msgstr " EGSD (len=%u):\n" -#: elf32-sh64.c:614 elf64-sh64.c:1748 +#: vms-alpha.c:5713 #, c-format -msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" -msgstr "%s: fel: ojusterad omlokaliseringstyp %d på %08x omlokalisering %08x\n" +msgid " EGSD entry %2u (type: %u, len: %u): " +msgstr " EGSD-post %2u (typ: %u, len: %u): " -#: elf32-sh64.c:698 +#: vms-alpha.c:5725 #, c-format -msgid "%s: could not write out added .cranges entries" -msgstr "%s: kunde inte skriva ut tillagda .cranges-poster" +msgid "PSC - Program section definition\n" +msgstr "PSC - Programsektionsdefinition\n" -#: elf32-sh64.c:760 +#: vms-alpha.c:5726 vms-alpha.c:5743 #, c-format -msgid "%s: could not write out sorted .cranges entries" -msgstr "%s: kunde inte skriva ut sorterade cranges-poster" +msgid " alignment : 2**%u\n" +msgstr " rättning : 2**%u\n" -#: elf32-sparc.c:2521 elf64-sparc.c:2314 +#: vms-alpha.c:5727 vms-alpha.c:5744 #, c-format -msgid "%s: probably compiled without -fPIC?" -msgstr "%s: troligen kompilerad utan -fPIC?" +msgid " flags : 0x%04x" +msgstr " flaggor : 0x%04x" -#: elf32-sparc.c:3348 +#: vms-alpha.c:5731 #, c-format -msgid "%s: compiled for a 64 bit system and target is 32 bit" -msgstr "%s: kompilerat för ett 64-bitarssystem och målet är 32-bitars" +msgid " alloc (len): %u (0x%08x)\n" +msgstr " allok (len): %u (0x%08x)\n" -#: elf32-sparc.c:3362 +#: vms-alpha.c:5732 vms-alpha.c:5789 vms-alpha.c:5838 #, c-format -msgid "%s: linking little endian files with big endian files" -msgstr "%s: länkar little endian-filer med big endian-filer" +msgid " name : %.*s\n" +msgstr " namn : %.*s\n" -#: elf32-v850.c:753 +#: vms-alpha.c:5742 #, c-format -msgid "Variable `%s' cannot occupy in multiple small data regions" -msgstr "Variabel \"%s\" kan inte befinna sig i flera små dataområden" +msgid "SPSC - Shared Image Program section def\n" +msgstr "SPSC - Delad avbilds-programsektionsdef\n" -#: elf32-v850.c:756 +#: vms-alpha.c:5748 #, c-format -msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" -msgstr "Variabel \"%s\" kan bara vara i ett av de små, tomma och pyttesmå dataområdena" +msgid " alloc (len) : %u (0x%08x)\n" +msgstr " allok (len) : %u (0x%08x)\n" -#: elf32-v850.c:759 +#: vms-alpha.c:5749 #, c-format -msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" -msgstr "Variabel \"%s\" kan inte vara i både små och tomma dataområden samtidigt" +msgid " image offset : 0x%08x\n" +msgstr " avbildsförskjutning : 0x%08x\n" -#: elf32-v850.c:762 +#: vms-alpha.c:5751 #, c-format -msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" -msgstr "Variabel \"%s\" kan inte vara i både små och pyttesmå dataområden samtidigt" +msgid " symvec offset : 0x%08x\n" +msgstr " symvec-förskjutning: 0x%08x\n" -#: elf32-v850.c:765 +#: vms-alpha.c:5753 #, c-format -msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" -msgstr "Variabel \"%s\" kan inte vara i både tomma och pyttesmå dataområden samtidigt" +msgid " name : %.*s\n" +msgstr " namn : %.*s\n" -#: elf32-v850.c:1144 -msgid "FAILED to find previous HI16 reloc\n" -msgstr "MISSLYCKADES med att hitta tidigare HI16-omlokalisering\n" +#: vms-alpha.c:5766 +#, c-format +msgid "SYM - Global symbol definition\n" +msgstr "SYM - Global symboldefinition\n" -#: elf32-v850.c:1789 -msgid "could not locate special linker symbol __gp" -msgstr "kunde inte lokalisera speciell länkarsymbol __gp" +#: vms-alpha.c:5767 vms-alpha.c:5827 vms-alpha.c:5848 vms-alpha.c:5867 +#, c-format +msgid " flags: 0x%04x" +msgstr " flaggor: 0x%04x" -#: elf32-v850.c:1793 -msgid "could not locate special linker symbol __ep" -msgstr "kunde inte lokalisera speciell länkarsymbol __ep" +#: vms-alpha.c:5770 +#, c-format +msgid " psect offset: 0x%08x\n" +msgstr " psect-förskjutning: 0x%08x\n" -#: elf32-v850.c:1797 -msgid "could not locate special linker symbol __ctbp" -msgstr "kunde inte lokalisera speciell länkarsymbol __ctbp" +#: vms-alpha.c:5774 +#, c-format +msgid " code address: 0x%08x\n" +msgstr " kodadress: 0x%08x\n" -#: elf32-v850.c:1963 +#: vms-alpha.c:5776 #, c-format -msgid "%s: Architecture mismatch with previous modules" -msgstr "%s: Arkitekturen passar inte ihop med tidigare moduler" +msgid " psect index for entry point : %u\n" +msgstr " psect-index för startpunkt: %u\n" -#: elf32-v850.c:1983 +#: vms-alpha.c:5779 vms-alpha.c:5855 vms-alpha.c:5874 #, c-format -msgid "private flags = %lx: " -msgstr "privata flaggor = %lx: " +msgid " psect index : %u\n" +msgstr " psect-index: %u\n" -#: elf32-v850.c:1988 -msgid "v850 architecture" -msgstr "v850-arkitektur" +#: vms-alpha.c:5781 vms-alpha.c:5857 vms-alpha.c:5876 +#, c-format +msgid " name : %.*s\n" +msgstr " namn : %.*s\n" -#: elf32-v850.c:1989 -msgid "v850e architecture" -msgstr "v850e-arkitektur" +#: vms-alpha.c:5788 +#, c-format +msgid "SYM - Global symbol reference\n" +msgstr "SYM - Global symbolreferens\n" -#: elf32-vax.c:549 -msgid " [nonpic]" -msgstr " [icke-pic]" +#: vms-alpha.c:5800 +#, c-format +msgid "IDC - Ident Consistency check\n" +msgstr "IDC - Identitetskonsekvenskontroll\n" -#: elf32-vax.c:552 -msgid " [d-float]" -msgstr " [d-flyttal]" +#: vms-alpha.c:5801 +#, c-format +msgid " flags : 0x%08x" +msgstr " flaggor : 0x%08x" -#: elf32-vax.c:555 -msgid " [g-float]" -msgstr " [g-flyttal]" +#: vms-alpha.c:5805 +#, c-format +msgid " id match : %x\n" +msgstr " id-match : %x\n" -#: elf32-vax.c:663 +#: vms-alpha.c:5807 #, c-format -msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" -msgstr "%s: varning: GOT-addendum %ld till \"%s\" stämmer inte överens med tidigare GOT-addendum %ld" +msgid " error severity: %x\n" +msgstr " felgrad :%x\n" -#: elf32-vax.c:1667 +#: vms-alpha.c:5810 #, c-format -msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" -msgstr "%s: varning: PLT-addendum %d till \"%s\" från sektionen %s ignorerades" +msgid " entity name : %.*s\n" +msgstr " postnamn : %.*s\n" -#: elf32-vax.c:1802 +#: vms-alpha.c:5812 #, c-format -msgid "%s: warning: %s relocation against symbol `%s' from %s section" -msgstr "%s: varning: %s-omlokalisering mot symbolen \"%s\" från sektionen %s" +msgid " object name : %.*s\n" +msgstr " objektnamn : %.*s\n" -#: elf32-vax.c:1808 +#: vms-alpha.c:5815 #, c-format -msgid "%s: warning: %s relocation to 0x%x from %s section" -msgstr "%s: varning: %s-omlokalisering till 0x%x från sektionen %s" +msgid " binary ident : 0x%08x\n" +msgstr " binärident : 0x%08x\n" -#: elf32-xstormy16.c:462 elf32-ia64.c:2450 elf64-ia64.c:2450 -msgid "non-zero addend in @fptr reloc" -msgstr "icke-tomt addendum i @fptr-omlokalisering" +#: vms-alpha.c:5818 +#, c-format +msgid " ascii ident : %.*s\n" +msgstr " ascii-ident : %.*s\n" -#: elf64-alpha.c:1108 -msgid "GPDISP relocation did not find ldah and lda instructions" -msgstr "GPDISP-omlokalisering hittade inga ldah- och lda-instruktioner" +#: vms-alpha.c:5826 +#, c-format +msgid "SYMG - Universal symbol definition\n" +msgstr "SYMG - Universell symboldefinition\n" -#: elf64-alpha.c:3731 +#: vms-alpha.c:5830 #, c-format -msgid "%s: .got subsegment exceeds 64K (size %d)" -msgstr "%s: .got-subsegment överskrider 64 kB (storlek %d)" +msgid " symbol vector offset: 0x%08x\n" +msgstr " symbolvektor-offset : 0x%08x\n" -#: elf64-alpha.c:4602 elf64-alpha.c:4614 +#: vms-alpha.c:5832 #, c-format -msgid "%s: gp-relative relocation against dynamic symbol %s" -msgstr "%s: gp-relativ omlokalisering mot dynamiska symbolen %s" +msgid " entry point: 0x%08x\n" +msgstr " startpunkt: 0x%08x\n" -#: elf64-alpha.c:4640 elf64-alpha.c:4773 +#: vms-alpha.c:5834 #, c-format -msgid "%s: pc-relative relocation against dynamic symbol %s" -msgstr "%s: pc-relativ omlokalisering mot dynamiska symbolen %s" +msgid " proc descr : 0x%08x\n" +msgstr " proc-beskr : 0x%08x\n" -#: elf64-alpha.c:4668 +#: vms-alpha.c:5836 #, c-format -msgid "%s: change in gp: BRSGP %s" -msgstr "%s: ändring i gp: BRSGP %s" +msgid " psect index: %u\n" +msgstr " psect-index: %u\n" -#: elf64-alpha.c:4693 -msgid "" -msgstr "" +#: vms-alpha.c:5847 +#, c-format +msgid "SYMV - Vectored symbol definition\n" +msgstr "SYMV - Vektoriserad symboldefinition\n" -#: elf64-alpha.c:4698 +#: vms-alpha.c:5851 #, c-format -msgid "%s: !samegp reloc against symbol without .prologue: %s" -msgstr "%s: !samegp-omlokalisering mot symbol utan .prologue: %s" +msgid " vector : 0x%08x\n" +msgstr " vektor : 0x%08x\n" -#: elf64-alpha.c:4749 +#: vms-alpha.c:5853 vms-alpha.c:5872 #, c-format -msgid "%s: unhandled dynamic relocation against %s" -msgstr "%s: ohanterad dynamisk omlokalisering mot %s" +msgid " psect offset: %u\n" +msgstr " psect-offset: %u\n" -#: elf64-alpha.c:4832 +#: vms-alpha.c:5866 #, c-format -msgid "%s: dtp-relative relocation against dynamic symbol %s" -msgstr "%s: dtp-relativ omlokalisering mot dynamiska symbolen %s" +msgid "SYMM - Global symbol definition with version\n" +msgstr "SYMM - Global symboldefinition med versioner\n" -#: elf64-alpha.c:4855 +#: vms-alpha.c:5870 #, c-format -msgid "%s: tp-relative relocation against dynamic symbol %s" -msgstr "%s: tp-relativ omlokalisering mot dynamiska symbolen %s" +msgid " version mask: 0x%08x\n" +msgstr " versionsmask: 0x%08x\n" -#: elf64-hppa.c:2086 +#: vms-alpha.c:5881 #, c-format -msgid "stub entry for %s cannot load .plt, dp offset = %ld" -msgstr "stubbpost för %s kan inte läsa in .plt, dp-avstånd = %ld" +msgid "unhandled egsd entry type %u\n" +msgstr "ohanterad egsd-posttyp %u\n" -#: elf64-mmix.c:1032 +#: vms-alpha.c:5915 #, 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: Intern inkkonsistensfel för värdet för\n" -" länkarallokerat globalt register: länkat: 0x%lx%08lx != avslappnat: 0x%lx%08lx\n" +msgid " linkage index: %u, replacement insn: 0x%08x\n" +msgstr " länkningsindex: %u, ersättning insn: 0x%08x\n" -#: elf64-mmix.c:1416 +#: vms-alpha.c:5918 #, c-format -msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s" -msgstr "%s: bas-plus-avståndsomlokalisering mot registersymbol: (okänd) i %s" +msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" +msgstr " psect-idx 1: %u, offset 1: 0x%08x %08x\n" -#: elf64-mmix.c:1421 +#: vms-alpha.c:5922 #, c-format -msgid "%s: base-plus-offset relocation against register symbol: %s in %s" -msgstr "%s: bas-plus-avståndsomlokalisering mot registersymbol: %s i %s" +msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" +msgstr " psect-idx 2: %u, offset 2: 0x%08x %08x\n" -#: elf64-mmix.c:1465 +#: vms-alpha.c:5927 #, c-format -msgid "%s: register relocation against non-register symbol: (unknown) in %s" -msgstr "%s: registeromlokalisering mot icke-registersymbol: (okänd) i %s" +msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" +msgstr " psect-idx 3: %u, offset 3: 0x%08x %08x\n" -#: elf64-mmix.c:1470 +#: vms-alpha.c:5932 #, c-format -msgid "%s: register relocation against non-register symbol: %s in %s" -msgstr "%s: registeromlokalisering mot icke-registersymbol: %s i %s" +msgid " global name: %.*s\n" +msgstr " globalt namn: %.*s\n" -#: elf64-mmix.c:1507 +#: vms-alpha.c:5942 #, c-format -msgid "%s: directive LOCAL valid only with a register or absolute value" -msgstr "%s: LOCAL-direktivet är endast giltigt med ett register eller absolutvärde" +msgid " %s (len=%u+%u):\n" +msgstr " %s (len=%u+%u):\n" -#: elf64-mmix.c:1535 +#: vms-alpha.c:5957 #, c-format -msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." -msgstr "%s: LOCAL-direktiv: Register $%ld är inte ett lokalt register. Första globala registret är $%ld." +msgid " (type: %3u, size: 4+%3u): " +msgstr " (typ: %3u, stl: 4+%3u): " -#: elf64-mmix.c:1994 +#: vms-alpha.c:5961 #, c-format -msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" -msgstr "%s: Fel: flera definitioner av \"%s\"; början på %s är inställd i en tidigare länkad fil\n" +msgid "STA_GBL (stack global) %.*s\n" +msgstr "STA_GBL (global stack) %.*s\n" -#: elf64-mmix.c:2053 -msgid "Register section has contents\n" -msgstr "Registersektion har innehåll\n" +#: vms-alpha.c:5965 +#, c-format +msgid "STA_LW (stack longword) 0x%08x\n" +msgstr "STA_LW (longword-stack) 0x%08x\n" -#: elf64-mmix.c:2216 +#: vms-alpha.c:5969 #, c-format -msgid "" -"Internal inconsistency: remaining %u != max %u.\n" -" Please report this bug." -msgstr "" -"Intern inkonsekvens: återstående %u != max %u.\n" -" Rapportera gärna detta fel." +msgid "STA_QW (stack quadword) 0x%08x %08x\n" +msgstr "STA_QW (quadword-stack) 0x%08x %08x\n" -#: elf64-ppc.c:2388 libbfd.c:831 +#: vms-alpha.c:5974 #, c-format -msgid "%s: compiled for a big endian system and target is little endian" -msgstr "%s: kompilerad för big endian-system och målet är little endian" +msgid "STA_PQ (stack psect base + offset)\n" +msgstr "STA_PQ (psect-basstack + förskjutning)\n" -#: elf64-ppc.c:2391 libbfd.c:833 +#: vms-alpha.c:5975 #, c-format -msgid "%s: compiled for a little endian system and target is big endian" -msgstr "%s: kompilerad för ett little endian-system och målet är big endian" +msgid " psect: %u, offset: 0x%08x %08x\n" +msgstr " psect: %u, förskjutning: 0x%08x %08x\n" -#: elf64-ppc.c:4857 +#: vms-alpha.c:5981 #, c-format -msgid "%s: unexpected reloc type %u in .opd section" -msgstr "%s: oväntad omlokaliseringstyp %u i .opd-sektion" +msgid "STA_LI (stack literal)\n" +msgstr "STA_LI (litteral stack)\n" -#: elf64-ppc.c:4877 +#: vms-alpha.c:5984 #, c-format -msgid "%s: .opd is not a regular array of opd entries" -msgstr "%s: .opd är inte en vanlig vektor med opd-poster" +msgid "STA_MOD (stack module)\n" +msgstr "STA_MOD (modulstack)\n" -#: elf64-ppc.c:4897 +#: vms-alpha.c:5987 #, c-format -msgid "%s: undefined sym `%s' in .opd section" -msgstr "%s: odefinierad symbol \"%s\" i .opd-sektion" +msgid "STA_CKARG (compare procedure argument)\n" +msgstr "STA_CKARG (jämför procedurargument)\n" -#: elf64-ppc.c:6136 +#: vms-alpha.c:5991 #, c-format -msgid "can't find branch stub `%s'" -msgstr "kan inte hitta grenstubb \"%s\"" +msgid "STO_B (store byte)\n" +msgstr "STO_B (lagra byte)\n" -#: elf64-ppc.c:6175 elf64-ppc.c:6250 +#: vms-alpha.c:5994 #, c-format -msgid "linkage table error against `%s'" -msgstr "länktabellsfel mot \"%s\"" +msgid "STO_W (store word)\n" +msgstr "STO_W (lagra ord)\n" -#: elf64-ppc.c:6340 +#: vms-alpha.c:5997 #, c-format -msgid "can't build branch stub `%s'" -msgstr "kan inte bygga grenstubb \"%s\"" +msgid "STO_LW (store longword)\n" +msgstr "STO_LW (lagra lÃ¥ngord)\n" -#: elf64-ppc.c:7047 -msgid ".glink and .plt too far apart" -msgstr ".glink och .plt för långt ifrån varandra" +#: vms-alpha.c:6000 +#, c-format +msgid "STO_QW (store quadword)\n" +msgstr "STO_QW (lagra quad-ord)\n" -#: elf64-ppc.c:7135 -msgid "stubs don't match calculated size" -msgstr "stubbar stämmer inte överens med beräknad storlek" +#: vms-alpha.c:6006 +#, c-format +msgid "STO_IMMR (store immediate repeat) %u bytes\n" +msgstr "STO_IMMR (lagra omedelbar upprepning) %u byte\n" -#: elf64-ppc.c:7147 +#: vms-alpha.c:6013 #, c-format -msgid "" -"linker stubs in %u groups\n" -" branch %lu\n" -" toc adjust %lu\n" -" long branch %lu\n" -" long toc adj %lu\n" -" plt call %lu" -msgstr "" -"länkarstubbar i %u grupper\n" -" gren %lu\n" -" toc-justering %lu\n" -" lång gren %lu\n" -" lång toc-just. %lu\n" -" plt-anrop %lu" +msgid "STO_GBL (store global) %.*s\n" +msgstr "STO_GBL (lagra global) %.*s\n" -#: elf64-ppc.c:7723 +#: vms-alpha.c:6017 #, c-format -msgid "%s(%s+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc" -msgstr "%s(%s+0x%lx): flera automatiska TOC stöds inte vid användning av dina crt-filer; kompilera om med -mminimal-toc eller uppgradera gcc" +msgid "STO_CA (store code address) %.*s\n" +msgstr "STO_CA (lagra kodadress) %.*s\n" -#: elf64-ppc.c:7731 +#: vms-alpha.c:6021 #, c-format -msgid "%s(%s+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 "%s(%s+0x%lx): syskonanropsoptimering till \"%s\" stöder inte flera automatiska TOC; kompilera om med -mminimal-toc eller -fno-optimize-sibling-calls, eller gör \"%s\" extern" +msgid "STO_RB (store relative branch)\n" +msgstr "STO_RB (lagra relativ gren)\n" -#: elf64-ppc.c:8329 +#: vms-alpha.c:6024 #, c-format -msgid "%s: relocation %s is not supported for symbol %s." -msgstr "%s: omlokaliseringen %s stöds inte för symbolen %s." +msgid "STO_AB (store absolute branch)\n" +msgstr "STO_AB (lagra absolut gren)\n" -#: elf64-ppc.c:8408 +#: vms-alpha.c:6027 #, c-format -msgid "%s: error: relocation %s not a multiple of %d" -msgstr "%s: fel: omlokaliseringen %s är inte en multipel av %d" +msgid "STO_OFF (store offset to psect)\n" +msgstr "STO_OFF (lagra offset i psect)\n" -#: elf64-sparc.c:1370 +#: vms-alpha.c:6033 #, c-format -msgid "%s: check_relocs: unhandled reloc type %d" -msgstr "%s: check_relocs: ohanterad omlokaliseringstyp %d" +msgid "STO_IMM (store immediate) %u bytes\n" +msgstr "STO_IMM (lagra omedelbart) %u byte\n" -#: elf64-sparc.c:1407 +#: vms-alpha.c:6040 #, c-format -msgid "%s: Only registers %%g[2367] can be declared using STT_REGISTER" -msgstr "%s: Endast register %%g[2367] kan deklareras med STT_REGISTER" +msgid "STO_GBL_LW (store global longword) %.*s\n" +msgstr "STO_GBL_LW (lagra globalt lÃ¥ngord) %.*s\n" -#: elf64-sparc.c:1427 +#: vms-alpha.c:6044 #, c-format -msgid "Register %%g%d used incompatibly: %s in %s, previously %s in %s" -msgstr "Register %%g%d används inkompatibelt: %s i %s, tidigare %s i %s" +msgid "STO_OFF (store LP with procedure signature)\n" +msgstr "STO_OFF (lagra LP med procedursignatur)\n" -#: elf64-sparc.c:1450 +#: vms-alpha.c:6047 #, c-format -msgid "Symbol `%s' has differing types: REGISTER in %s, previously %s in %s" -msgstr "Symbolen \"%s\" har olika typer: REGISTER i %s, tidigare %s i %s" +msgid "STO_BR_GBL (store branch global) *todo*\n" +msgstr "STO_BR_GBL (lagra gren globalt) *todo*\n" -#: elf64-sparc.c:1496 +#: vms-alpha.c:6050 #, c-format -msgid "Symbol `%s' has differing types: %s in %s, previously REGISTER in %s" -msgstr "Symbolen \"%s\" har olika typer: %s i %s, tidigare REGISTER i %s" +msgid "STO_BR_PS (store branch psect + offset) *todo*\n" +msgstr "STO_BR_PS (lagra grenens psect + offset) *todo*\n" -#: elf64-sparc.c:3053 +#: vms-alpha.c:6054 #, c-format -msgid "%s: linking UltraSPARC specific with HAL specific code" -msgstr "%s: länkar UltraSPARC-specifik med HAL-specifik kod" +msgid "OPR_NOP (no-operation)\n" +msgstr "OPR_NOP (no-operation)\n" -#: elf64-x86-64.c:739 +#: vms-alpha.c:6057 #, c-format -msgid "%s: %s' accessed both as normal and thread local symbol" -msgstr "%s: \"%s\" anropad både som lokal normal symbol och lokal trådsymbol" +msgid "OPR_ADD (add)\n" +msgstr "OPR_ADD (addera)\n" -#: elfcode.h:1113 +#: vms-alpha.c:6060 #, c-format -msgid "%s: version count (%ld) does not match symbol count (%ld)" -msgstr "%s: versionsantal (%ld) stämmer inte med symbolantal (%ld)" +msgid "OPR_SUB (substract)\n" +msgstr "OPR_SUB (subtrahera)\n" -#: elfcode.h:1342 +#: vms-alpha.c:6063 #, c-format -msgid "%s(%s): relocation %d has invalid symbol index %ld" -msgstr "%s(%s): omlokalisering %d har ogiltigt symbolindex %ld" +msgid "OPR_MUL (multiply)\n" +msgstr "OPR_MUL (multiplicera)\n" -#: elflink.c:1456 +#: vms-alpha.c:6066 #, c-format -msgid "%s: warning: unexpected redefinition of indirect versioned symbol `%s'" -msgstr "%s: varning: oväntad omdefinition av indirekt versionsangiven symbol \"%s\"" +msgid "OPR_DIV (divide)\n" +msgstr "OPR_DIV (division)\n" -#: elflink.c:1807 +#: vms-alpha.c:6069 #, c-format -msgid "%s: undefined versioned symbol name %s" -msgstr "%s: odefinierat symbolnamn med version %s" +msgid "OPR_AND (logical and)\n" +msgstr "OPR_AND (logiskt ”och”)\n" -#: elflink.c:2142 +#: vms-alpha.c:6072 #, c-format -msgid "%s: relocation size mismatch in %s section %s" -msgstr "%s: omlokaliseringsstorleken stämmer inte överens i %s, sektion %s" +msgid "OPR_IOR (logical inclusive or)\n" +msgstr "OPR_IOR (logiskt inkluderande ”eller”)\n" -#: elflink.c:2434 +#: vms-alpha.c:6075 #, c-format -msgid "warning: type and size of dynamic symbol `%s' are not defined" -msgstr "varning: typen och storleken på dynamiska symbolen \"%s\" är inte definierade" +msgid "OPR_EOR (logical exclusive or)\n" +msgstr "OPR_EOR (logiskt exkluderande ”eller”)\n" -#: elflink.h:1022 +#: vms-alpha.c:6078 #, c-format -msgid "%s: %s: invalid version %u (max %d)" -msgstr "%s: %s: ogiltig version %u (max %d)" +msgid "OPR_NEG (negate)\n" +msgstr "OPR_NEG (negera)\n" -#: elflink.h:1063 +#: vms-alpha.c:6081 #, c-format -msgid "%s: %s: invalid needed version %d" -msgstr "%s: %s: ogiltig krävd version %d" +msgid "OPR_COM (complement)\n" +msgstr "OPR_COM (komplementera)\n" -#: elflink.h:1238 +#: vms-alpha.c:6084 #, c-format -msgid "Warning: alignment %u of symbol `%s' in %s is smaller than %u in %s" -msgstr "Varning: justeringen %u på symbolen \"%s\" i %s är mindre än %u i %s" +msgid "OPR_INSV (insert field)\n" +msgstr "OPR_INSV (infoga fält)\n" -#: elflink.h:1252 +#: vms-alpha.c:6087 #, c-format -msgid "Warning: size of symbol `%s' changed from %lu in %s to %lu in %s" -msgstr "Varning: storleken på symbolen \"%s\" ändrades från %lu i %s till %lu i %s" +msgid "OPR_ASH (arithmetic shift)\n" +msgstr "OPR_ASH (aritmetiskt skifte)\n" -#: elflink.h:2160 +#: vms-alpha.c:6090 #, c-format -msgid "%s: undefined version: %s" -msgstr "%s: odefinierad version: %s" +msgid "OPR_USH (unsigned shift)\n" +msgstr "OPR_USH (osignerat skifte)\n" -#: elflink.h:2226 +#: vms-alpha.c:6093 #, c-format -msgid "%s: .preinit_array section is not allowed in DSO" -msgstr "%s: .preinit_array-sektionen är inte tillåten i DSO" +msgid "OPR_ROT (rotate)\n" +msgstr "OPR_ROT (rotera)\n" -#: elflink.h:3078 -msgid "Not enough memory to sort relocations" -msgstr "Inte tillräckligt med minne för att sortera omlokaliseringar" +#: vms-alpha.c:6096 +#, c-format +msgid "OPR_SEL (select)\n" +msgstr "OPR_SEL (välj)\n" -#: elflink.h:3958 elflink.h:4001 +#: vms-alpha.c:6099 #, c-format -msgid "%s: could not find output section %s" -msgstr "%s: kunde inte hitta utdatasektionen %s" +msgid "OPR_REDEF (redefine symbol to curr location)\n" +msgstr "OPR_REDEF (omdefiniera symbol till nuv. plats)\n" -#: elflink.h:3964 +#: vms-alpha.c:6102 #, c-format -msgid "warning: %s section has zero size" -msgstr "varning: sektionen %s har nollstorlek" +msgid "OPR_REDEF (define a literal)\n" +msgstr "OPR_REDEF (definiera en litteral)\n" -#: elflink.h:4483 +#: vms-alpha.c:6106 #, c-format -msgid "%s: %s symbol `%s' in %s is referenced by DSO" -msgstr "%s: %s-symbolen \"%s\" i %s refereras till av DSO" +msgid "STC_LP (store cond linkage pair)\n" +msgstr "STC_LP (lagra villkorslänkpar)\n" -#: elflink.h:4564 +#: vms-alpha.c:6110 #, c-format -msgid "%s: could not find output section %s for input section %s" -msgstr "%s: kunde inte hitta utdatasektionen %s för indatasektionen %s" +msgid "STC_LP_PSB (store cond linkage pair + signature)\n" +msgstr "STC_LP_PSB (lagra villkorslänkpar + signatur)\n" -#: elflink.h:4666 +#: vms-alpha.c:6111 #, c-format -msgid "%s: %s symbol `%s' isn't defined" -msgstr "%s: %s-symbolen \"%s\" är inte definierad" +msgid " linkage index: %u, procedure: %.*s\n" +msgstr " länkindex: %u, procedur: %.*s\n" -#: elflink.h:5053 elflink.h:5095 -msgid "%T: discarded in section `%s' from %s\n" -msgstr "%T: bortkastade i sektionen \"%s\" från %s\n" +#: vms-alpha.c:6114 +#, c-format +msgid " signature: %.*s\n" +msgstr " signatur: %.*s\n" -#: elfxx-mips.c:887 -msgid "static procedure (no name)" -msgstr "statisk procedur (inget namn)" +#: vms-alpha.c:6117 +#, c-format +msgid "STC_GBL (store cond global)\n" +msgstr "STC_GBL (lagra villkor globalt)\n" -#: elfxx-mips.c:1897 -msgid "not enough GOT space for local GOT entries" -msgstr "inte tillräckligt med GOT-utrymme för lokala GOT-poster" +#: vms-alpha.c:6118 +#, c-format +msgid " linkage index: %u, global: %.*s\n" +msgstr " länkindex: %u, globalt: %.*s\n" -#: elfxx-mips.c:3691 +#: vms-alpha.c:6122 #, c-format -msgid "%s: %s+0x%lx: jump to stub routine which is not jal" -msgstr "%s: %s+0x%lx: hoppa till stubbrutin som inte är jal" +msgid "STC_GCA (store cond code address)\n" +msgstr "STC_GCA (lagra villkorets kodadress)\n" -#: elfxx-mips.c:5192 +#: vms-alpha.c:6123 #, c-format -msgid "%s: Malformed reloc detected for section %s" -msgstr "%s: Felaktig omlokalisering för sektion %s upptäckt" +msgid " linkage index: %u, procedure name: %.*s\n" +msgstr " länkindex: %u, procedurnamn: %.*s\n" -#: elfxx-mips.c:5266 +#: vms-alpha.c:6127 #, c-format -msgid "%s: CALL16 reloc at 0x%lx not against global symbol" -msgstr "%s: CALL16-omlokalisering vid 0x%lx är inte mot global symbol" +msgid "STC_PS (store cond psect + offset)\n" +msgstr "STC_PS (lagra villkorets psect + offset)\n" -#: elfxx-mips.c:8692 +#: vms-alpha.c:6129 #, c-format -msgid "%s: illegal section name `%s'" -msgstr "%s: ogiltigt sektionsnamn \"%s\"" +msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" +msgstr " länkindex: %u, psect: %u, förskjutning: 0x%08x %08x\n" -#: elfxx-mips.c:9025 +#: vms-alpha.c:6136 #, c-format -msgid "%s: endianness incompatible with that of the selected emulation" -msgstr "%s: endianness inkompatibel med den för den valda emuleringen" +msgid "STC_NOP_GBL (store cond NOP at global addr)\n" +msgstr "STC_NOP_GBL (lagra villk. NOP i global adress)\n" -#: elfxx-mips.c:9037 +#: vms-alpha.c:6140 #, c-format -msgid "%s: ABI is incompatible with that of the selected emulation" -msgstr "%s: ABI är inkompatibelt med den för den valda emuleringen" +msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" +msgstr "STC_NOP_PS (lagra villk. NOP i psect + förskjutning)\n" -#: elfxx-mips.c:9104 +#: vms-alpha.c:6144 #, c-format -msgid "%s: warning: linking PIC files with non-PIC files" -msgstr "%s: varning: länkar PIC-filer med icke-PIC-filer" +msgid "STC_BSR_GBL (store cond BSR at global addr)\n" +msgstr "STC_BSR_GBL (lagra villk. BSR i global adress)\n" -#: elfxx-mips.c:9121 +#: vms-alpha.c:6148 #, c-format -msgid "%s: linking 32-bit code with 64-bit code" -msgstr "%s: länkar 32-bitarskod med 64-bitarskod" +msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" +msgstr "STC_BSR_PS (lagra villk. BSR i psect + förskjutning)\n" -#: elfxx-mips.c:9149 +#: vms-alpha.c:6152 #, c-format -msgid "%s: linking %s module with previous %s modules" -msgstr "%s: länkar %s-modul med tidigare %s-moduler" +msgid "STC_LDA_GBL (store cond LDA at global addr)\n" +msgstr "STC_LDA_GBL (lagra villk. LDA i global adress)\n" -#: elfxx-mips.c:9172 +#: vms-alpha.c:6156 #, c-format -msgid "%s: ABI mismatch: linking %s module with previous %s modules" -msgstr "%s: ABI passar inte: länkar %s-modul med tidigare %s-moduler" +msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" +msgstr "STC_LDA_PS (lagra villk. LDA i psect + förskjutning)\n" -#: elfxx-mips.c:9241 -msgid " [abi=O32]" -msgstr " [abi=O32]" +#: vms-alpha.c:6160 +#, c-format +msgid "STC_BOH_GBL (store cond BOH at global addr)\n" +msgstr "STC_BOH_GBL (lagra villk. BOH i global adress)\n" -#: elfxx-mips.c:9243 -msgid " [abi=O64]" -msgstr " [abi=O64]" +#: vms-alpha.c:6164 +#, c-format +msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" +msgstr "STC_BOH_PS (lagra villk. BOH i psect + förskjutning)\n" -#: elfxx-mips.c:9245 -msgid " [abi=EABI32]" -msgstr " [abi=EABI32]" +#: vms-alpha.c:6169 +#, c-format +msgid "STC_NBH_GBL (store cond or hint at global addr)\n" +msgstr "STC_NBH_GBL (lagra villk. eller hint i global adress)\n" -#: elfxx-mips.c:9247 -msgid " [abi=EABI64]" -msgstr " [abi=EABI64]" +#: vms-alpha.c:6173 +#, c-format +msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" +msgstr "STC_NBH_PS (lagra villk. eller hint i psect + förskjutning)\n" -#: elfxx-mips.c:9249 -msgid " [abi unknown]" -msgstr " [okänt abi]" +#: vms-alpha.c:6177 +#, c-format +msgid "CTL_SETRB (set relocation base)\n" +msgstr "CTL_SETRB (ange bas för omlokalisering)\n" -#: elfxx-mips.c:9251 -msgid " [abi=N32]" -msgstr " [abi=N32]" +#: vms-alpha.c:6183 +#, c-format +msgid "CTL_AUGRB (augment relocation base) %u\n" +msgstr "CTL_AUGRB (öka bas för omlokalisering) %u\n" -#: elfxx-mips.c:9253 -msgid " [abi=64]" -msgstr " [abi=64]" +#: vms-alpha.c:6187 +#, c-format +msgid "CTL_DFLOC (define location)\n" +msgstr "CTL_DFLOC (definiera plats)\n" -#: elfxx-mips.c:9255 -msgid " [no abi set]" -msgstr " [inget abi inställt]" +#: vms-alpha.c:6190 +#, c-format +msgid "CTL_STLOC (set location)\n" +msgstr "CTL_STLOC (ange plats)\n" -#: elfxx-mips.c:9258 -msgid " [mips1]" -msgstr " [mips1]" +#: vms-alpha.c:6193 +#, c-format +msgid "CTL_STKDL (stack defined location)\n" +msgstr "CTL_STKDL (stackdefinierad plats)\n" -#: elfxx-mips.c:9260 -msgid " [mips2]" -msgstr " [mips2]" +#: vms-alpha.c:6196 vms-alpha.c:6610 +#, c-format +msgid "*unhandled*\n" +msgstr "*ohanterad*\n" -#: elfxx-mips.c:9262 -msgid " [mips3]" -msgstr " [mips3]" +#: vms-alpha.c:6226 vms-alpha.c:6265 +#, c-format +msgid "cannot read GST record length\n" +msgstr "Kan inte läsa GST-postens längd\n" -#: elfxx-mips.c:9264 -msgid " [mips4]" -msgstr " [mips4]" +#. Ill-formed. +#: vms-alpha.c:6247 +#, c-format +msgid "cannot find EMH in first GST record\n" +msgstr "Kan inte hitta EMH i första GST-posten\n" -#: elfxx-mips.c:9266 -msgid " [mips5]" -msgstr " [mips5]" +#: vms-alpha.c:6273 +#, c-format +msgid "cannot read GST record header\n" +msgstr "Kan inte läsa GST-postens huvud\n" -#: elfxx-mips.c:9268 -msgid " [mips32]" -msgstr " [mips32]" +#: vms-alpha.c:6286 +#, c-format +msgid " corrupted GST\n" +msgstr " fördärvad GST\n" -#: elfxx-mips.c:9270 -msgid " [mips64]" -msgstr " [mips64]" +#: vms-alpha.c:6294 +#, c-format +msgid "cannot read GST record\n" +msgstr "Kan inte läsa GST-post\n" -#: elfxx-mips.c:9272 -msgid " [mips32r2]" -msgstr " [mips32r2]" +#: vms-alpha.c:6323 +#, c-format +msgid " unhandled EOBJ record type %u\n" +msgstr " ohanterad EOBJ-posttyp %u\n" -#: elfxx-mips.c:9274 -msgid " [unknown ISA]" -msgstr " [okänd ISA]" +#: vms-alpha.c:6346 +#, c-format +msgid " bitcount: %u, base addr: 0x%08x\n" +msgstr " bitantal: %u, basadress: 0x%08x\n" -#: elfxx-mips.c:9277 -msgid " [mdmx]" -msgstr " [mdmx]" +#: vms-alpha.c:6359 +#, c-format +msgid " bitmap: 0x%08x (count: %u):\n" +msgstr " bitmap: 0x%08x (antal: %u):\n" -#: elfxx-mips.c:9280 -msgid " [mips16]" -msgstr " [mips16]" +#: vms-alpha.c:6366 +#, c-format +msgid " %08x" +msgstr " %08x" -#: elfxx-mips.c:9283 -msgid " [32bitmode]" -msgstr " [32-bitarsläge]" +#: vms-alpha.c:6391 +#, c-format +msgid " image %u (%u entries)\n" +msgstr " avbild %u (%u poster)\n" -#: elfxx-mips.c:9285 -msgid " [not 32bitmode]" -msgstr " [inte 32-bitarsläge]" +#: vms-alpha.c:6396 +#, c-format +msgid " offset: 0x%08x, val: 0x%08x\n" +msgstr " förskjutning: 0x%08x, val: 0x%08x\n" -#: i386linux.c:457 m68klinux.c:461 sparclinux.c:458 +#: vms-alpha.c:6417 #, c-format -msgid "Output file requires shared library `%s'\n" -msgstr "Utdatafilen kräver delade biblioteket \"%s\"\n" +msgid " image %u (%u entries), offsets:\n" +msgstr " avbild %u (%u poster), förskjutningar:\n" -#: i386linux.c:465 m68klinux.c:469 sparclinux.c:466 +#: vms-alpha.c:6424 #, c-format -msgid "Output file requires shared library `%s.so.%s'\n" -msgstr "Utdatafilen kräver delade biblioteket \"%s.so.%s\"\n" +msgid " 0x%08x" +msgstr " 0x%08x" -#: i386linux.c:654 i386linux.c:704 m68klinux.c:661 m68klinux.c:709 -#: sparclinux.c:656 sparclinux.c:706 +#. 64 bits. +#: vms-alpha.c:6546 #, c-format -msgid "Symbol %s not defined for fixups\n" -msgstr "Symbolen %s är inte definierad för fixar\n" +msgid "64 bits *unhandled*\n" +msgstr "64 bitar *ohanterad*\n" -#: i386linux.c:728 m68klinux.c:733 sparclinux.c:730 -msgid "Warning: fixup count mismatch\n" -msgstr "Varning: antalet fixar stämmer inte\n" +#: vms-alpha.c:6550 +#, c-format +msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" +msgstr "klass: %u, dtype: %u, längd: %u, pekare: 0x%08x\n" -#: ieee.c:293 +#: vms-alpha.c:6561 #, c-format -msgid "%s: string too long (%d chars, max 65535)" -msgstr "%s: strängen är för lång (%d tecken, max 65535)" +msgid "non-contiguous array of %s\n" +msgstr "osammanhängande fält av %s\n" -#: ieee.c:428 +#: vms-alpha.c:6565 #, c-format -msgid "%s: unrecognized symbol `%s' flags 0x%x" -msgstr "%s: okänd symbol \"%s\" flaggor 0x%x" +msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" +msgstr "dimct: %u, aflaggor: 0x%02x, siffror: %u, skala: %u\n" -#: ieee.c:938 +#: vms-alpha.c:6569 #, c-format -msgid "%s: unimplemented ATI record %u for symbol %u" -msgstr "%s: inte implementerad ATI-post %u för symbolen %u" +msgid "arsize: %u, a0: 0x%08x\n" +msgstr "arstorlek: %u, a0: 0x%08x\n" -#: ieee.c:963 +#: vms-alpha.c:6573 #, c-format -msgid "%s: unexpected ATN type %d in external part" -msgstr "%s: oväntad ATN-typ %d i extern del" +msgid "Strides:\n" +msgstr "Steg:\n" -#: ieee.c:985 +#: vms-alpha.c:6578 #, c-format -msgid "%s: unexpected type after ATN" -msgstr "%s: oväntad typ efter ATN" +msgid "[%u]: %u\n" +msgstr "[%u]: %u\n" -#: ihex.c:264 +#: vms-alpha.c:6583 #, c-format -msgid "%s:%d: unexpected character `%s' in Intel Hex file\n" -msgstr "%s:%d: oväntat tecken \"%s\" i hexadecimal Intel-fil\n" +msgid "Bounds:\n" +msgstr "Gränser:\n" -#: ihex.c:372 +#: vms-alpha.c:6588 #, c-format -msgid "%s:%u: bad checksum in Intel Hex file (expected %u, found %u)" -msgstr "%s:%u: felaktig kontrollsumma i hexadecimal Intel-fil (förväntade %u, hittade %u)" +msgid "[%u]: Lower: %u, upper: %u\n" +msgstr "[%u]: Lägre: %u, övre: %u\n" -#: ihex.c:426 +#: vms-alpha.c:6600 #, c-format -msgid "%s:%u: bad extended address record length in Intel Hex file" -msgstr "%s:%u: felaktig längd på post för utökad adress i hexadecimal Intel-fil" +msgid "unaligned bit-string of %s\n" +msgstr "otillrättad bitsträng av %s\n" -#: ihex.c:443 +#: vms-alpha.c:6604 #, c-format -msgid "%s:%u: bad extended start address length in Intel Hex file" -msgstr "%s:%u: felaktig längd på utökad startadress i hexadecimal Intel-fil" +msgid "base: %u, pos: %u\n" +msgstr "bas: %u, pos: %u\n" -#: ihex.c:460 +#: vms-alpha.c:6624 #, c-format -msgid "%s:%u: bad extended linear address record length in Intel Hex file" -msgstr "%s:%u: felaktig längd på post för utökad linjär adress i hexadecimal Intel-fil" +msgid "vflags: 0x%02x, value: 0x%08x " +msgstr "vflaggor: 0x%02x, värde: 0x%08x " -#: ihex.c:477 +#: vms-alpha.c:6630 #, c-format -msgid "%s:%u: bad extended linear start address length in Intel Hex file" -msgstr "%s:%u: felaktig längd på post för utökad linjär startadress i hexadecimal Intel-fil" +msgid "(no value)\n" +msgstr "(inget värde)\n" -#: ihex.c:494 +#: vms-alpha.c:6633 #, c-format -msgid "%s:%u: unrecognized ihex type %u in Intel Hex file\n" -msgstr "%s:%u: okänd ihex-typ %u i hexadecimal Intel-fil\n" +msgid "(not active)\n" +msgstr "(inaktiv)\n" -#: ihex.c:619 +#: vms-alpha.c:6636 #, c-format -msgid "%s: internal error in ihex_read_section" -msgstr "%s: internt fel i ihex_read_section" +msgid "(not allocated)\n" +msgstr "(ej allokerad)\n" -#: ihex.c:654 +#: vms-alpha.c:6639 #, c-format -msgid "%s: bad section length in ihex_read_section" -msgstr "%s: felaktig sektionslängd i ihex_read_sektion" +msgid "(descriptor)\n" +msgstr "(beskrivning)\n" -#: ihex.c:872 +#: vms-alpha.c:6643 #, c-format -msgid "%s: address 0x%s out of range for Intel Hex file" -msgstr "%s: adressen 0x%s är utanför intervallet för hexadecimal Intel-fil" +msgid "(trailing value)\n" +msgstr "(efterhängande värde)\n" -#: libbfd.c:861 +#: vms-alpha.c:6646 #, c-format -msgid "Deprecated %s called at %s line %d in %s\n" -msgstr "Föråldrad %s anropad vid %s rad %d i %s\n" +msgid "(value spec follows)\n" +msgstr "(värdespec. följer)\n" -#: libbfd.c:864 +#: vms-alpha.c:6649 #, c-format -msgid "Deprecated %s called\n" -msgstr "Föråldrad %s anropad\n" +msgid "(at bit offset %u)\n" +msgstr "(vid bitoffset %u)\n" + +#: vms-alpha.c:6652 +#, c-format +msgid "(reg: %u, disp: %u, indir: %u, kind: " +msgstr "(reg: %u, disp: %u, indir: %u, sort: " -#: linker.c:1829 +#: vms-alpha.c:6659 +msgid "literal" +msgstr "litteral" + +#: vms-alpha.c:6662 +msgid "address" +msgstr "adress" + +#: vms-alpha.c:6665 +msgid "desc" +msgstr "beskr" + +#: vms-alpha.c:6668 +msgid "reg" +msgstr "reg" + +#: vms-alpha.c:6743 #, c-format -msgid "%s: indirect symbol `%s' to `%s' is a loop" -msgstr "%s: indirekt symbol \"%s\" till \"%s\" är en slinga" +msgid "Debug symbol table:\n" +msgstr "Felsökningssymboltabell:\n" -#: linker.c:2697 +#: vms-alpha.c:6754 #, c-format -msgid "Attempt to do relocatable link with %s input and %s output" -msgstr "Försök att göra en omlokaliseringsbar länk med %s-indata och %s-utdata" +msgid "cannot read DST header\n" +msgstr "Kan inte läsa DST-huvud\n" -#: merge.c:896 +#: vms-alpha.c:6759 #, c-format -msgid "%s: access beyond end of merged section (%ld + %ld)" -msgstr "%s: åtkomst bortom slut på sammanslagen sektion (%ld + %ld)" +msgid " type: %3u, len: %3u (at 0x%08x): " +msgstr " typ: %3u, len: %3u (vid 0x%08x): " -#: mmo.c:503 +#: vms-alpha.c:6773 #, c-format -msgid "%s: No core to allocate section name %s\n" -msgstr "%s: Ingen kärna för att allokera sektionsnamn %s\n" +msgid "cannot read DST symbol\n" +msgstr "Kan inte läsa DST-symbol\n" -#: mmo.c:579 +#: vms-alpha.c:6816 #, c-format -msgid "%s: No core to allocate a symbol %d bytes long\n" -msgstr "%s: Ingen kärna för att allokera en %d byte lång symbol\n" +msgid "standard data: %s\n" +msgstr "Standarddata: %s\n" -#: mmo.c:1287 +#: vms-alpha.c:6819 vms-alpha.c:6903 #, c-format -msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" -msgstr "%s: ogiltig mmo-fil: initieringsvärde för $255 är inte \"Main\"\n" +msgid " name: %.*s\n" +msgstr " namn: %.*s\n" -#: mmo.c:1433 +#: vms-alpha.c:6826 #, c-format -msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" -msgstr "%s: bred teckensekvens som inte stöds 0x%02X 0x%02X efter symbolnamnet som börjar med \"%s\"\n" +msgid "modbeg\n" +msgstr "modbeg\n" -#: mmo.c:1674 +#: vms-alpha.c:6827 #, c-format -msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" -msgstr "%s: ogiltig mmo-fil: lopkod \"%d\" stöds inte\n" +msgid " flags: %d, language: %u, major: %u, minor: %u\n" +msgstr " flaggor: %d, sprÃ¥k: %u, större: %u, mindre: %u\n" -#: mmo.c:1684 +#: vms-alpha.c:6833 vms-alpha.c:7099 #, c-format -msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" -msgstr "%s: ogiltig mmo-fil: förväntade YZ = 1 fick YZ = %d för lop_quote\n" +msgid " module name: %.*s\n" +msgstr " modulnamn: %.*s\n" -#: mmo.c:1720 +#: vms-alpha.c:6836 #, c-format -msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" -msgstr "%s: ogiltig mmo-fil: förväntade z = 1 eller z = 2, fick z = %d för lop_loc\n" +msgid " compiler : %.*s\n" +msgstr " kompilator : %.*s\n" -#: mmo.c:1766 +#: vms-alpha.c:6841 #, c-format -msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" -msgstr "%s: ogiltig mmo-fil: förväntade z = 1 eller z = 2, fick z = %d för lop_fixo\n" +msgid "modend\n" +msgstr "modend\n" + +#: vms-alpha.c:6848 +msgid "rtnbeg\n" +msgstr "rtnbeg\n" -#: mmo.c:1805 +#: vms-alpha.c:6849 #, c-format -msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" -msgstr "%s: ogiltig mmo-fil: förväntade y = 0, fick y = %d för lop_fixrx\n" +msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" +msgstr " flaggor: %u, adress: 0x%08x, pd-adress: 0x%08x\n" -#: mmo.c:1814 +#: vms-alpha.c:6854 #, c-format -msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" -msgstr "%s: ogiltig mmo-fil: förväntade z = 16 eller z = 24, fick z = %d för lop_fixr\n" +msgid " routine name: %.*s\n" +msgstr " rutinnamn: %.*s\n" -#: mmo.c:1837 +#: vms-alpha.c:6862 #, 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: ogiltig mmo-fil: inledande byte i operandord måste vara 0 eller 1, fick %d för lop_fixrx\n" +msgid "rtnend: size 0x%08x\n" +msgstr "rtnend: storlek 0x%08x\n" -#: mmo.c:1860 +#: vms-alpha.c:6870 #, c-format -msgid "%s: cannot allocate file name for file number %d, %d bytes\n" -msgstr "%s: kan inte allokera filnamn för fil nummer %d, %d byte\n" +msgid "prolog: bkpt address 0x%08x\n" +msgstr "prolog: bkpt-adress 0x%08x\n" -#: mmo.c:1880 +#: vms-alpha.c:6878 #, c-format -msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n" -msgstr "%s: ogiltig mmo-fil: fil nummer %d \"%s\", var redan angiven som \"%s\"\n" +msgid "epilog: flags: %u, count: %u\n" +msgstr "epilog: flaggor: %u, antal: %u\n" -#: mmo.c:1893 +#: vms-alpha.c:6887 +#, c-format +msgid "blkbeg: address: 0x%08x, name: %.*s\n" +msgstr "blkbeg: adress: 0x%08x, namn: %.*s\n" + +#: vms-alpha.c:6896 +#, c-format +msgid "blkend: size: 0x%08x\n" +msgstr "blkend: storlek: 0x%08x\n" + +#: vms-alpha.c:6902 +#, c-format +msgid "typspec (len: %u)\n" +msgstr "typspec (len: %u)\n" + +#: vms-alpha.c:6909 +#, c-format +msgid "septyp, name: %.*s\n" +msgstr "septyp, namn: %.*s\n" + +#: vms-alpha.c:6918 +#, c-format +msgid "recbeg: name: %.*s\n" +msgstr "recbeg: namn: %.*s\n" + +#: vms-alpha.c:6925 +#, c-format +msgid "recend\n" +msgstr "recend\n" + +#: vms-alpha.c:6928 +#, c-format +msgid "enumbeg, len: %u, name: %.*s\n" +msgstr "enumbeg, len: %u, namn: %.*s\n" + +#: vms-alpha.c:6932 +#, c-format +msgid "enumelt, name: %.*s\n" +msgstr "enumelt, namn: %.*s\n" + +#: vms-alpha.c:6936 +#, c-format +msgid "enumend\n" +msgstr "enumend\n" + +#: vms-alpha.c:6953 +#, c-format +msgid "discontiguous range (nbr: %u)\n" +msgstr "osammanhängande intervall (nbr: %u)\n" + +#: vms-alpha.c:6955 +#, c-format +msgid " address: 0x%08x, size: %u\n" +msgstr " adress: 0x%08x, storlek: %u\n" + +#: vms-alpha.c:6965 +#, c-format +msgid "line num (len: %u)\n" +msgstr "radnum (len: %u)\n" + +#: vms-alpha.c:6982 +#, c-format +msgid "delta_pc_w %u\n" +msgstr "delta_pc_w %u\n" + +#: vms-alpha.c:6989 +#, c-format +msgid "incr_linum(b): +%u\n" +msgstr "incr_linum(b): +%u\n" + +#: vms-alpha.c:6995 +#, c-format +msgid "incr_linum_w: +%u\n" +msgstr "incr_linum_w: +%u\n" + +#: vms-alpha.c:7001 +#, c-format +msgid "incr_linum_l: +%u\n" +msgstr "incr_linum_l: +%u\n" + +#: vms-alpha.c:7007 +#, c-format +msgid "set_line_num(w) %u\n" +msgstr "set_line_num(w) %u\n" + +#: vms-alpha.c:7012 +#, c-format +msgid "set_line_num_b %u\n" +msgstr "set_line_num_b %u\n" + +#: vms-alpha.c:7017 +#, c-format +msgid "set_line_num_l %u\n" +msgstr "set_line_num_l %u\n" + +#: vms-alpha.c:7022 +#, c-format +msgid "set_abs_pc: 0x%08x\n" +msgstr "set_abs_pc: 0x%08x\n" + +#: vms-alpha.c:7026 +#, c-format +msgid "delta_pc_l: +0x%08x\n" +msgstr "delta_pc_l: +0x%08x\n" + +#: vms-alpha.c:7031 +#, c-format +msgid "term(b): 0x%02x" +msgstr "term(b): 0x%02x" + +#: vms-alpha.c:7033 #, c-format -msgid "%s: invalid mmo file: file name for number %d was not specified before use\n" -msgstr "%s: ogiltig mmo-fil: filnamnet för nummer %d angavs inte innan användning\n" +msgid " pc: 0x%08x\n" +msgstr " pc: 0x%08x\n" -#: mmo.c:1999 +#: vms-alpha.c:7038 #, c-format -msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" -msgstr "%s: ogiltig mmo-fil: fälten y och z i lop_stab är icke-tomma, y: %d, z: %d\n" +msgid "term_w: 0x%04x" +msgstr "term_w: 0x%04x" -#: mmo.c:2035 +#: vms-alpha.c:7040 #, c-format -msgid "%s: invalid mmo file: lop_end not last item in file\n" -msgstr "%s: ogiltig mmo-fil: lop_end är inte sista objektet i fil\n" +msgid " pc: 0x%08x\n" +msgstr " pc: 0x%08x\n" -#: mmo.c:2048 +#: vms-alpha.c:7046 #, 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: ogiltig mmo-fil: YZ i lop_end (%ld) är inte lika med antalet tetra till den föregående lop_stab (%ld)\n" +msgid "delta pc +%-4d" +msgstr "delta pc +%-4d" -#: mmo.c:2698 +#: vms-alpha.c:7049 #, c-format -msgid "%s: invalid symbol table: duplicate symbol `%s'\n" -msgstr "%s: ogiltig symboltabell: dublettsymbol \"%s\"\n" +msgid " pc: 0x%08x line: %5u\n" +msgstr " pc: 0x%08x rad: %5u\n" -#: mmo.c:2949 +#: vms-alpha.c:7054 #, c-format -msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" -msgstr "%s: Felaktig symboldefinition: \"Main\" är inställd till %s istället för startadressen %s\n" +msgid " *unhandled* cmd %u\n" +msgstr " *ohanterat* kmd %u\n" -#: mmo.c:3039 +#: vms-alpha.c:7069 #, 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: varning: symboltabellen är för stor för mmo, större än 65535 32-bitars ord: %d. Endast \"Main\" kommer att skickas.\n" +msgid "source (len: %u)\n" +msgstr "källa (len: %u)\n" -#: mmo.c:3084 +#: vms-alpha.c:7083 #, c-format -msgid "%s: internal error, symbol table changed size from %d to %d words\n" -msgstr "%s: internt fel, symboltabellen ändrade storlek från %d till %d ord\n" +msgid " declfile: len: %u, flags: %u, fileid: %u\n" +msgstr " dklfil: len: %u, flaggor: %u, fil-ID: %u\n" -#: mmo.c:3139 +#: vms-alpha.c:7087 #, c-format -msgid "%s: internal error, internal register section %s had contents\n" -msgstr "%s: internt fel, interna registersektionen %s hade innehåll\n" +msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" +msgstr " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" -#: mmo.c:3191 +#: vms-alpha.c:7096 #, c-format -msgid "%s: no initialized registers; section length 0\n" -msgstr "%s: inga initierade register; sektionslängd 0\n" +msgid " filename : %.*s\n" +msgstr " filnamn : %.*s\n" -#: mmo.c:3197 +#: vms-alpha.c:7105 #, c-format -msgid "%s: too many initialized registers; section length %ld\n" -msgstr "%s: för många initierade register; sektionslängd %ld\n" +msgid " setfile %u\n" +msgstr " setfile %u\n" -#: mmo.c:3202 +#: vms-alpha.c:7110 vms-alpha.c:7115 #, c-format -msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" -msgstr "%s: ogiltig startadress för initierade register med längden %ld: 0x%lx%08lx\n" +msgid " setrec %u\n" +msgstr " setrec %u\n" -#: oasys.c:1052 +#: vms-alpha.c:7120 vms-alpha.c:7125 #, c-format -msgid "%s: can not represent section `%s' in oasys" -msgstr "%s: kan inte representera sektionen \"%s\" i oasys" +msgid " setlnum %u\n" +msgstr " setlnum %u\n" -#: osf-core.c:137 +#: vms-alpha.c:7130 vms-alpha.c:7135 #, c-format -msgid "Unhandled OSF/1 core file section type %d\n" -msgstr "Ohanterad sektionstyp %d för OSF/1-minnesfil\n" +msgid " deflines %u\n" +msgstr " deflines %u\n" -#: pe-mips.c:659 +#: vms-alpha.c:7139 #, c-format -msgid "%s: `ld -r' not supported with PE MIPS objects\n" -msgstr "%s: \"ld -r\" stöds inte med PE MIPS-objekt\n" +msgid " formfeed\n" +msgstr " formfeed\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:795 +#: vms-alpha.c:7143 #, c-format -msgid "%s: unimplemented %s\n" -msgstr "%s: oimplementerat %s\n" +msgid " *unhandled* cmd %u\n" +msgstr " *ohanterat* kmd %u\n" -#: pe-mips.c:821 +#: vms-alpha.c:7155 #, c-format -msgid "%s: jump too far away\n" -msgstr "%s: hopp för långt bort\n" +msgid "*unhandled* dst type %u\n" +msgstr "*ohanterad* dst-typ %u\n" -#: pe-mips.c:848 +#: vms-alpha.c:7187 #, c-format -msgid "%s: bad pair/reflo after refhi\n" -msgstr "%s: felaktigt par/reflo efter refhi\n" +msgid "cannot read EIHD\n" +msgstr "Kan inte läsa EIHD\n" -#. XXX code yet to be written. -#: peicode.h:787 +#: vms-alpha.c:7190 #, c-format -msgid "%s: Unhandled import type; %x" -msgstr "%s: Ohanterad importtyp; %x" +msgid "EIHD: (size: %u, nbr blocks: %u)\n" +msgstr "EIHD: (storlek: %u, nbr-block: %u)\n" -#: peicode.h:792 +#: vms-alpha.c:7193 #, c-format -msgid "%s: Unrecognised import type; %x" -msgstr "%s: Okänd importtyp; %x" +msgid " majorid: %u, minorid: %u\n" +msgstr " majorid: %u, minorid: %u\n" + +#: vms-alpha.c:7201 +msgid "executable" +msgstr "körbar fil" -#: peicode.h:806 +#: vms-alpha.c:7204 +msgid "linkable image" +msgstr "länkningsbar avbild" + +#: vms-alpha.c:7210 #, c-format -msgid "%s: Unrecognised import name type; %x" -msgstr "%s: Okänd importnamnstyp; %x" +msgid " image type: %u (%s)" +msgstr " avbildtyp: %u (%s)" + +#: vms-alpha.c:7216 +msgid "native" +msgstr "nativ" -#: peicode.h:1164 +#: vms-alpha.c:7219 +msgid "CLI" +msgstr "CLI" + +#: vms-alpha.c:7225 #, c-format -msgid "%s: Unrecognised machine type (0x%x) in Import Library Format archive" -msgstr "%s: Okänd maskintyp (0x%x) i Import Library Format-arkiv" +msgid ", subtype: %u (%s)\n" +msgstr ", deltyp: %u (%s)\n" -#: peicode.h:1176 +#: vms-alpha.c:7231 #, c-format -msgid "%s: Recognised but unhandled machine type (0x%x) in Import Library Format archive" -msgstr "%s: Känd men ohanterad maskintyp (0x%x) i Import Library Format-arkiv" +msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" +msgstr " förskjutningar: isd: %u, aktiv: %u, symdbg: %u, imgid: %u, patch: %u\n" -#: peicode.h:1193 +#: vms-alpha.c:7235 #, c-format -msgid "%s: size field is zero in Import Library Format header" -msgstr "%s: storleksfältet är noll i Import Library Format-huvud" +msgid " fixup info rva: " +msgstr " fixup info rva: " -#: peicode.h:1224 +#: vms-alpha.c:7237 #, c-format -msgid "%s: string not null terminated in ILF object file." -msgstr "%s: sträng inte nollterminerad i ILF-objektfil." +msgid ", symbol vector rva: " +msgstr ", symbolvektor rva: " -#: ppcboot.c:416 +#: vms-alpha.c:7240 +#, c-format msgid "" "\n" -"ppcboot header:\n" +" version array off: %u\n" msgstr "" "\n" -"ppcboot-huvud:\n" +" versionsfält av: %u\n" -#: ppcboot.c:417 +#: vms-alpha.c:7244 #, c-format -msgid "Entry offset = 0x%.8lx (%ld)\n" -msgstr "Startavstånd = 0x%.8lx (%ld)\n" +msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" +msgstr " img I/O-antal: %u, nbr-kanaler: %u, req pri: %08x%08x\n" -#: ppcboot.c:418 +#: vms-alpha.c:7250 #, c-format -msgid "Length = 0x%.8lx (%ld)\n" -msgstr "Längd = 0x%.8lx (%ld)\n" +msgid " linker flags: %08x:" +msgstr " länkarflaggor: %08x:" -#: ppcboot.c:421 +#: vms-alpha.c:7280 #, c-format -msgid "Flag field = 0x%.2x\n" -msgstr "Flaggfält = 0x%.2x\n" +msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" +msgstr " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" -#: ppcboot.c:427 +#: vms-alpha.c:7286 #, c-format -msgid "Partition name = \"%s\"\n" -msgstr "Partitionsnamn = \"%s\"\n" +msgid " BPAGE: %u" +msgstr " BPAGE: %u" -#: ppcboot.c:446 +#: vms-alpha.c:7292 #, c-format -msgid "" -"\n" -"Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -msgstr "" -"\n" -"Start på partition[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgid ", ext fixup offset: %u, no_opt psect off: %u" +msgstr ", ext fixup förskjutning: %u, no_opt psect off: %u" -#: ppcboot.c:452 +#: vms-alpha.c:7295 #, c-format -msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -msgstr "Slut på partition[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgid ", alias: %u\n" +msgstr ", alias: %u\n" -#: ppcboot.c:458 +#: vms-alpha.c:7303 #, c-format -msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" -msgstr "Sektor för partition[%d] = 0x%.8lx (%ld)\n" +msgid "system version array information:\n" +msgstr "fältinformation om systemversion:\n" -#: ppcboot.c:459 +#: vms-alpha.c:7307 #, c-format -msgid "Partition[%d] length = 0x%.8lx (%ld)\n" -msgstr "Längd på partition[%d] = 0x%.8lx (%ld)\n" +msgid "cannot read EIHVN header\n" +msgstr "Kan inte läsa EIHVN-huvud\n" -#: som.c:5422 -msgid "som_sizeof_headers unimplemented" -msgstr "som_sizeof_headers är inte implementerat" +#: vms-alpha.c:7317 +#, c-format +msgid "cannot read EIHVN version\n" +msgstr "Kan inte läsa EIHVN-version\n" -#: srec.c:302 +#: vms-alpha.c:7320 #, c-format -msgid "%s:%d: Unexpected character `%s' in S-record file\n" -msgstr "%s:%d: Oväntat tecken \"%s\" i S-postfil\n" +msgid " %02u " +msgstr " %02u " + +#: vms-alpha.c:7324 +msgid "BASE_IMAGE " +msgstr "BASE_IMAGE " + +#: vms-alpha.c:7327 +msgid "MEMORY_MANAGEMENT" +msgstr "MEMORY_MANAGEMENT" + +#: vms-alpha.c:7330 +msgid "IO " +msgstr "IO " + +#: vms-alpha.c:7333 +msgid "FILES_VOLUMES " +msgstr "FILES_VOLUMES " + +#: vms-alpha.c:7336 +msgid "PROCESS_SCHED " +msgstr "PROCESS_SCHED " + +#: vms-alpha.c:7339 +msgid "SYSGEN " +msgstr "SYSGEN " + +#: vms-alpha.c:7342 +msgid "CLUSTERS_LOCKMGR " +msgstr "CLUSTERS_LOCKMGR " + +#: vms-alpha.c:7345 +msgid "LOGICAL_NAMES " +msgstr "LOGICAL_NAMES " -# Vad är stabs? -#: stabs.c:319 +#: vms-alpha.c:7348 +msgid "SECURITY " +msgstr "SECURITY " + +#: vms-alpha.c:7351 +msgid "IMAGE_ACTIVATOR " +msgstr "IMAGE_ACTIVATOR " + +#: vms-alpha.c:7354 +msgid "NETWORKS " +msgstr "NETWORKS " + +#: vms-alpha.c:7357 +msgid "COUNTERS " +msgstr "COUNTERS " + +#: vms-alpha.c:7360 +msgid "STABLE " +msgstr "STABLE " + +#: vms-alpha.c:7363 +msgid "MISC " +msgstr "MISC " + +#: vms-alpha.c:7366 +msgid "CPU " +msgstr "CPU " + +#: vms-alpha.c:7369 +msgid "VOLATILE " +msgstr "VOLATILE " + +#: vms-alpha.c:7372 +msgid "SHELL " +msgstr "SHELL " + +#: vms-alpha.c:7375 +msgid "POSIX " +msgstr "POSIX " + +#: vms-alpha.c:7378 +msgid "MULTI_PROCESSING " +msgstr "MULTI_PROCESSING " + +#: vms-alpha.c:7381 +msgid "GALAXY " +msgstr "GALAXY " + +#: vms-alpha.c:7384 +msgid "*unknown* " +msgstr "*unknown* " + +#: vms-alpha.c:7387 #, c-format -msgid "%s(%s+0x%lx): Stabs entry has invalid string index." -msgstr "%s(%s+0x%lx): Stabbpost har ogiltigt strängindex." +msgid ": %u.%u\n" +msgstr ": %u.%u\n" -#: syms.c:1019 -msgid "Unsupported .stab relocation" -msgstr ".stab-omlokalisering som inte stöds" +#: vms-alpha.c:7400 vms-alpha.c:7659 +#, c-format +msgid "cannot read EIHA\n" +msgstr "Kan inte läsa EIHA\n" -#: vms-gsd.c:356 +#: vms-alpha.c:7403 #, c-format -msgid "bfd_make_section (%s) failed" -msgstr "bfd_make_section (%s) misslyckades" +msgid "Image activation: (size=%u)\n" +msgstr "Avbildsaktivering: (storlek=%u)\n" -#: vms-gsd.c:371 +#: vms-alpha.c:7405 #, c-format -msgid "bfd_set_section_flags (%s, %x) failed" -msgstr "bfd_set_section_flags (%s, %x) misslyckades" +msgid " First address : 0x%08x 0x%08x\n" +msgstr " Första adress : 0x%08x 0x%08x\n" -#: vms-gsd.c:407 +#: vms-alpha.c:7408 #, c-format -msgid "Size mismatch section %s=%lx, %s=%lx" -msgstr "Storleken passar inte på sektion %s=%lx, %s=%lx" +msgid " Second address: 0x%08x 0x%08x\n" +msgstr " Andra adress : 0x%08x 0x%08x\n" -#: vms-gsd.c:704 +#: vms-alpha.c:7411 #, c-format -msgid "unknown gsd/egsd subtype %d" -msgstr "okänd gsd/egsd-undertyp %d" +msgid " Third address : 0x%08x 0x%08x\n" +msgstr " Tredje adress : 0x%08x 0x%08x\n" -#: vms-hdr.c:408 -msgid "Object module NOT error-free !\n" -msgstr "Objektmodulen INTE felfri!\n" +#: vms-alpha.c:7414 +#, c-format +msgid " Fourth address: 0x%08x 0x%08x\n" +msgstr " Fjärde adress : 0x%08x 0x%08x\n" -#: vms-misc.c:541 +#: vms-alpha.c:7417 #, c-format -msgid "Stack overflow (%d) in _bfd_vms_push" -msgstr "Stacken ger överspill (%d) i _bfd_vms_push" +msgid " Shared image : 0x%08x 0x%08x\n" +msgstr " Delad avbild : 0x%08x 0x%08x\n" -#: vms-misc.c:559 -msgid "Stack underflow in _bfd_vms_pop" -msgstr "Stacken ger underspill i _bfd_vms_pop" +#: vms-alpha.c:7428 +#, c-format +msgid "cannot read EIHI\n" +msgstr "Kan inte läsa EIHI\n" -#: vms-misc.c:918 -msgid "_bfd_vms_output_counted called with zero bytes" -msgstr "_bfd_vms_output_counted anropad med noll byte" +#: vms-alpha.c:7431 +#, c-format +msgid "Image identification: (major: %u, minor: %u)\n" +msgstr "Avbildsidentifiering: (major: %u, minor: %u)\n" -#: vms-misc.c:923 -msgid "_bfd_vms_output_counted called with too many bytes" -msgstr "_bfd_vms_output_counted called anropad med för många byte" +#: vms-alpha.c:7434 +#, c-format +msgid " image name : %.*s\n" +msgstr " avbildens namn : %.*s\n" -#: vms-misc.c:1054 +#: vms-alpha.c:7436 #, c-format -msgid "Symbol %s replaced by %s\n" -msgstr "Symbolen %s ersatt med %s\n" +msgid " link time : %s\n" +msgstr " länkningstid : %s\n" -#: vms-misc.c:1117 +#: vms-alpha.c:7438 #, c-format -msgid "failed to enter %s" -msgstr "misslyckades med att gå in i %s" +msgid " image ident : %.*s\n" +msgstr " avbildsident : %.*s\n" -#: vms-tir.c:102 -msgid "No Mem !" -msgstr "Inget minne!" +#: vms-alpha.c:7440 +#, c-format +msgid " linker ident : %.*s\n" +msgstr " länkarident : %.*s\n" -#: vms-tir.c:383 +#: vms-alpha.c:7442 #, c-format -msgid "bad section index in %s" -msgstr "felaktigt sektionsindex i %s" +msgid " image build ident: %.*s\n" +msgstr " avbildsbyggident: %.*s\n" -#: vms-tir.c:396 +#: vms-alpha.c:7452 #, c-format -msgid "unsupported STA cmd %s" -msgstr "STA-kommando %s stöds inte" +msgid "cannot read EIHS\n" +msgstr "Kan inte läsa EIHS\n" -#: vms-tir.c:401 vms-tir.c:1261 +#: vms-alpha.c:7455 #, c-format -msgid "reserved STA cmd %d" -msgstr "reserverat STA-kommando %d" +msgid "Image symbol & debug table: (major: %u, minor: %u)\n" +msgstr "Avbildens symbol & felsöktabell: (major: %u, minor: %u)\n" -#: vms-tir.c:512 vms-tir.c:535 +#: vms-alpha.c:7460 #, c-format -msgid "%s: no symbol \"%s\"" -msgstr "%s: ingen symbol \"%s\"" +msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" +msgstr " Felsökningssymboltabell: vbn: %u, storlek: %u (0x%x)\n" -#. unsigned shift -#. rotate -#. Redefine symbol to current location. -#. Define a literal. -#: vms-tir.c:602 vms-tir.c:714 vms-tir.c:824 vms-tir.c:842 vms-tir.c:850 -#: vms-tir.c:859 vms-tir.c:1584 +#: vms-alpha.c:7464 #, c-format -msgid "%s: not supported" -msgstr "%s: stöds inte" +msgid " global symbol table: vbn: %u, records: %u\n" +msgstr " Global symboltabell: vbn: %u, poster: %u\n" -#: vms-tir.c:607 vms-tir.c:1439 +#: vms-alpha.c:7468 #, c-format -msgid "%s: not implemented" -msgstr "%s: inte implementerad" +msgid " debug module table : vbn: %u, size: %u\n" +msgstr " Felsökningsmodultabell: vbn: %u, storlek: %u\n" -#: vms-tir.c:611 vms-tir.c:1443 +#: vms-alpha.c:7481 #, c-format -msgid "reserved STO cmd %d" -msgstr "reserverat STO-kommando %d" +msgid "cannot read EISD\n" +msgstr "Kan inte läsa EISD\n" -#: vms-tir.c:729 vms-tir.c:1589 +#: vms-alpha.c:7491 #, c-format -msgid "reserved OPR cmd %d" -msgstr "reserverat OPR-kommando %d" +msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" +msgstr "Avbildens sektionsbeskrivning: (major: %u, minor: %u, storlek: %u, förskjutning: %u)\n" -#: vms-tir.c:797 vms-tir.c:1653 +#: vms-alpha.c:7498 #, c-format -msgid "reserved CTL cmd %d" -msgstr "reserverat CTL-kommando %d" +msgid " section: base: 0x%08x%08x size: 0x%08x\n" +msgstr " sektion: bas: 0x%08x%08x storlek: 0x%08x\n" -#. stack byte from image -#. arg: none. -#: vms-tir.c:1169 -msgid "stack-from-image not implemented" -msgstr "stack-from-image är inte implementerat" +#: vms-alpha.c:7503 +#, c-format +msgid " flags: 0x%04x" +msgstr " flaggor: 0x%04x" + +#: vms-alpha.c:7540 +#, c-format +msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" +msgstr " vbn: %u, pfc: %u, matchctl: %u type: %u (" -#: vms-tir.c:1187 -msgid "stack-entry-mask not fully implemented" -msgstr "stack-entry-mask är inte helt implementerat" +#: vms-alpha.c:7546 +msgid "NORMAL" +msgstr "NORMAL" -#. 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:1201 -msgid "PASSMECH not fully implemented" -msgstr "PASSMECH är inte helt implementerat" +#: vms-alpha.c:7549 +msgid "SHRFXD" +msgstr "SHRFXD" -#: vms-tir.c:1220 -msgid "stack-local-symbol not fully implemented" -msgstr "stack-local-symbol är inte helt implementerat" +#: vms-alpha.c:7552 +msgid "PRVFXD" +msgstr "PRVFXD" -#: vms-tir.c:1233 -msgid "stack-literal not fully implemented" -msgstr "stack-literal är inte helt implementerat" +#: vms-alpha.c:7555 +msgid "SHRPIC" +msgstr "SHRPIC" -#: vms-tir.c:1254 -msgid "stack-local-symbol-entry-point-mask not fully implemented" -msgstr "stack-local-symbol-entry-point-mask är inte helt implementerat" +#: vms-alpha.c:7558 +msgid "PRVPIC" +msgstr "PRVPIC" -#: vms-tir.c:1531 vms-tir.c:1543 vms-tir.c:1555 vms-tir.c:1567 vms-tir.c:1632 -#: vms-tir.c:1640 vms-tir.c:1648 +#: vms-alpha.c:7561 +msgid "USRSTACK" +msgstr "USRSTACK" + +#: vms-alpha.c:7567 +msgid ")\n" +msgstr ")\n" + +#: vms-alpha.c:7569 #, c-format -msgid "%s: not fully implemented" -msgstr "%s: inte helt implementerat" +msgid " ident: 0x%08x, name: %.*s\n" +msgstr " ident: 0x%08x, namn: %.*s\n" -#: vms-tir.c:1705 +#: vms-alpha.c:7579 #, c-format -msgid "obj code %d not found" -msgstr "objektkod %d kunde inte hittas" +msgid "cannot read DMT\n" +msgstr "Kan inte läsa DMT\n" -#: vms-tir.c:2043 +#: vms-alpha.c:7583 #, c-format -msgid "SEC_RELOC with no relocs in section %s" -msgstr "SEC_RELOC utan omlokaliseringar i sektion %s" +msgid "Debug module table:\n" +msgstr "Felsökningsmodultabell:\n" -#: vms-tir.c:2331 +#: vms-alpha.c:7592 #, c-format -msgid "Unhandled relocation %s" -msgstr "Ohanterad omlokalisering %s" +msgid "cannot read DMT header\n" +msgstr "Kan inte läsa DMT-huvud\n" -#: xcofflink.c:1244 +#: vms-alpha.c:7597 #, c-format -msgid "%s: `%s' has line numbers but no enclosing section" -msgstr "%s: \"%s\" har radnummer men ingen inneslutande sektion" +msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" +msgstr " moduloffset: 0x%08x, storlek: 0x%08x, (%u psects)\n" -#: xcofflink.c:1297 +#: vms-alpha.c:7607 #, c-format -msgid "%s: class %d symbol `%s' has no aux entries" -msgstr "%s: klass %d-symbolen \"%s\" har inga yttre poster" +msgid "cannot read DMT psect\n" +msgstr "Kan inte läsa DMT-psect\n" -#: xcofflink.c:1320 +#: vms-alpha.c:7610 #, c-format -msgid "%s: symbol `%s' has unrecognized csect type %d" -msgstr "%s: symbolen \"%s\" har okänd csect-typ %d" +msgid " psect start: 0x%08x, length: %u\n" +msgstr " psect start: 0x%08x, längd: %u\n" -#: xcofflink.c:1332 +#: vms-alpha.c:7623 #, c-format -msgid "%s: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" -msgstr "%s: felaktig XTY_ER-symbol \"%s\": klass %d scnum %d scnlen %d" +msgid "cannot read DST\n" +msgstr "kan inte läsa DST\n" -#: xcofflink.c:1368 +#: vms-alpha.c:7633 #, c-format -msgid "%s: XMC_TC0 symbol `%s' is class %d scnlen %d" -msgstr "%s: XMC_TC0-symbolen \"%s\" är klass %d scnlen %d" +msgid "cannot read GST\n" +msgstr "Kan inte läsa GST\n" -#: xcofflink.c:1520 +#: vms-alpha.c:7637 #, c-format -msgid "%s: csect `%s' not in enclosing section" -msgstr "%s: csect \"%s\" är inte i inneslutande sektion" +msgid "Global symbol table:\n" +msgstr "Global symboltabell:\n" -#: xcofflink.c:1627 +#: vms-alpha.c:7665 #, c-format -msgid "%s: misplaced XTY_LD `%s'" -msgstr "%s: felaktigt placerat XTY_LD \"%s\"" +msgid "Image activator fixup: (major: %u, minor: %u)\n" +msgstr "Avbildsaktiverarfixup: (major: %u, minor: %u)\n" -#: xcofflink.c:1958 +#: vms-alpha.c:7668 #, c-format -msgid "%s: reloc %s:%d not in csect" -msgstr "%s: omlokaliseringen %s:%d är inte i csect" +msgid " iaflink : 0x%08x %08x\n" +msgstr " iaflänk : 0x%08x %08x\n" -#: xcofflink.c:2095 +#: vms-alpha.c:7671 #, c-format -msgid "%s: XCOFF shared object when not producing XCOFF output" -msgstr "%s: XCOFF delade objekt när inte XCOFF-utdata produceras" +msgid " fixuplnk: 0x%08x %08x\n" +msgstr " fixuplnk: 0x%08x %08x\n" -#: xcofflink.c:2116 +#: vms-alpha.c:7674 #, c-format -msgid "%s: dynamic object with no .loader section" -msgstr "%s: dynamiskt objekt utan någon .loader-sektion" +msgid " size : %u\n" +msgstr " storlek : %u\n" -#: xcofflink.c:2761 +#: vms-alpha.c:7676 #, c-format -msgid "%s: no such symbol" -msgstr "%s: ingen sådan symbol" +msgid " flags: 0x%08x\n" +msgstr " flaggor: 0x%08x\n" -#: xcofflink.c:2894 -msgid "error: undefined symbol __rtinit" -msgstr "fel: odefinierad symbol __rtinit" +#: vms-alpha.c:7680 +#, c-format +msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" +msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n" -#: xcofflink.c:3455 +#: vms-alpha.c:7684 #, c-format -msgid "warning: attempt to export undefined symbol `%s'" -msgstr "varning: försök att exportera odefinierade symbolen \"%s\"" +msgid " qdotadroff: %5u, ldotadroff: %5u\n" +msgstr " qdotadroff: %5u, ldotadroff: %5u\n" -#: xcofflink.c:4448 +#: vms-alpha.c:7688 #, c-format -msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" -msgstr "TOC ger överspill: 0x%lx > 0x10000; prova -mminimal-toc vid kompilering" +msgid " codeadroff: %5u, lpfixoff : %5u\n" +msgstr " codeadroff: %5u, lpfixoff : %5u\n" -#: xcofflink.c:5288 xcofflink.c:5755 xcofflink.c:5817 xcofflink.c:6119 +#: vms-alpha.c:7691 #, c-format -msgid "%s: loader reloc in unrecognized section `%s'" -msgstr "%s: inläsaromlokalisering i okända sektionen \"%s\"" +msgid " chgprtoff : %5u\n" +msgstr " chgprtoff : %5u\n" -#: xcofflink.c:5310 xcofflink.c:6130 +#: vms-alpha.c:7694 #, c-format -msgid "%s: `%s' in loader reloc but not loader sym" -msgstr "%s: \"%s\" i inläsaromlokalisering men inte inläsarsym" +msgid " shlstoff : %5u, shrimgcnt : %5u\n" +msgstr " shlstoff : %5u, shrimgcnt : %5u\n" -#: xcofflink.c:5325 +#: vms-alpha.c:7696 #, c-format -msgid "%s: loader reloc in read-only section %s" -msgstr "%s: inläsaromlokalisering i skrivskyddade sektionen %s" +msgid " shlextra : %5u, permctx : %5u\n" +msgstr " shlextra : %5u, permctx : %5u\n" -#: elf32-ia64.c:2392 elf64-ia64.c:2392 -msgid "@pltoff reloc against local symbol" -msgstr "@pltoff-omlokalisering mot lokal symbol" +#: vms-alpha.c:7699 +#, c-format +msgid " base_va : 0x%08x\n" +msgstr " base_va : 0x%08x\n" -#: elf32-ia64.c:3804 elf64-ia64.c:3804 +#: vms-alpha.c:7701 #, c-format -msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" -msgstr "%s: kort datasegment spillde över (0x%lx >= 0x400000)" +msgid " lppsbfixoff: %5u\n" +msgstr " lppsbfixoff: %5u\n" -#: elf32-ia64.c:3815 elf64-ia64.c:3815 +#: vms-alpha.c:7709 #, c-format -msgid "%s: __gp does not cover short data segment" -msgstr "%s: __gp täcker inte kort datasegment" +msgid " Shareable images:\n" +msgstr " Avbilder som kan delas:\n" -#: elf32-ia64.c:4131 elf64-ia64.c:4131 +#: vms-alpha.c:7713 #, c-format -msgid "%s: linking non-pic code in a shared library" -msgstr "%s: länkar icke-pic-kod i delat bibliotek" +msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" +msgstr " %u: storlek: %u, flaggor: 0x%02x, namn: %.*s\n" -#: elf32-ia64.c:4164 elf64-ia64.c:4164 +#: vms-alpha.c:7720 #, c-format -msgid "%s: @gprel relocation against dynamic symbol %s" -msgstr "%s: @gprel-omlokalisering mot dynamiska symbolen %s" +msgid " quad-word relocation fixups:\n" +msgstr " quad-ord omlokaliseringsfixar:\n" -#: elf32-ia64.c:4224 elf64-ia64.c:4224 +#: vms-alpha.c:7725 #, c-format -msgid "%s: linking non-pic code in a position independent executable" -msgstr "%s: länkar icke-pic-kod i en positionsoberoende körbar fil" +msgid " long-word relocation fixups:\n" +msgstr " lÃ¥ngord omlokaliseringsfixar:\n" -#: elf32-ia64.c:4363 elf64-ia64.c:4363 +#: vms-alpha.c:7730 #, c-format -msgid "%s: @internal branch to dynamic symbol %s" -msgstr "%s: @internal-gren till dynamiska symbolen %s" +msgid " quad-word .address reference fixups:\n" +msgstr " quad-ord .address-referensfixar:\n" -#: elf32-ia64.c:4365 elf64-ia64.c:4365 +#: vms-alpha.c:7735 #, c-format -msgid "%s: speculation fixup to dynamic symbol %s" -msgstr "%s: spekulationsfix till dynamiska symbolen %s" +msgid " long-word .address reference fixups:\n" +msgstr " lÃ¥ngord .address-referensfixar:\n" -#: elf32-ia64.c:4367 elf64-ia64.c:4367 +#: vms-alpha.c:7740 #, c-format -msgid "%s: @pcrel relocation against dynamic symbol %s" -msgstr "%s: @pcrel-omlokalisering mot dynamiska symbolen %s" +msgid " Code Address Reference Fixups:\n" +msgstr " Kodadressreferens-fixar:\n" -#: elf32-ia64.c:4579 elf64-ia64.c:4579 -msgid "unsupported reloc" -msgstr "omlokaliseringen stöds inte" +#: vms-alpha.c:7745 +#, c-format +msgid " Linkage Pairs Reference Fixups:\n" +msgstr " Länkning Par Referens Fixar:\n" -#: elf32-ia64.c:4858 elf64-ia64.c:4858 +#: vms-alpha.c:7754 #, c-format -msgid "%s: linking trap-on-NULL-dereference with non-trapping files" -msgstr "%s: länkar fånga-vid-NULL-dereferens med ickefångande filer" +msgid " Change Protection (%u entries):\n" +msgstr " Ändringsskydd (%u poster):\n" -#: elf32-ia64.c:4867 elf64-ia64.c:4867 +#: vms-alpha.c:7759 #, c-format -msgid "%s: linking big-endian files with little-endian files" -msgstr "%s: länkar big endian-filer med little endian-filer" +msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " +msgstr " bas: 0x%08x %08x, storlek: 0x%08x, prot: 0x%08x " + +#. FIXME: we do not yet support relocatable link. It is not obvious +#. how to do it for debug infos. +#: vms-alpha.c:8599 +msgid "%P: relocatable link is not supported\n" +msgstr "%P: Länk som kan omlokaliseras stöds inte\n" -#: elf32-ia64.c:4876 elf64-ia64.c:4876 +#: vms-alpha.c:8669 +msgid "%P: multiple entry points: in modules %B and %B\n" +msgstr "%P: Flera ingÃ¥ngspunkter: i modulerna %B och %B\n" + +#: vms-lib.c:1444 #, c-format -msgid "%s: linking 64-bit files with 32-bit files" -msgstr "%s: länkar 64-bitarsfiler med 32-bitarsfiler" +msgid "could not open shared image '%s' from '%s'" +msgstr "Kunde inte öppna delad avbild ”%s” frÃ¥n ”%s”" + +#: vms-misc.c:360 +msgid "_bfd_vms_output_counted called with zero bytes" +msgstr "_bfd_vms_output_counted anropad med noll byte" + +#: vms-misc.c:365 +msgid "_bfd_vms_output_counted called with too many bytes" +msgstr "_bfd_vms_output_counted called anropad med för mÃ¥nga byte" -#: elf32-ia64.c:4885 elf64-ia64.c:4885 +#: xcofflink.c:824 #, c-format -msgid "%s: linking constant-gp files with non-constant-gp files" -msgstr "%s: länkar konstant-gp-filer med icke-konstant-gp-filer" +msgid "%s: XCOFF shared object when not producing XCOFF output" +msgstr "%s: XCOFF delade objekt när inte XCOFF-utdata produceras" -#: elf32-ia64.c:4895 elf64-ia64.c:4895 +#: xcofflink.c:845 #, c-format -msgid "%s: linking auto-pic files with non-auto-pic files" -msgstr "%s: länkar auto-pic-filer med icke-auto-pic-filer" +msgid "%s: dynamic object with no .loader section" +msgstr "%s: dynamiskt objekt utan nÃ¥gon .loader-sektion" + +#: xcofflink.c:1404 +msgid "%B: `%s' has line numbers but no enclosing section" +msgstr "%B: ”%s” har radnummer, men ingen omslutande sektion" + +#: xcofflink.c:1456 +msgid "%B: class %d symbol `%s' has no aux entries" +msgstr "%B: Klass %d-symbolen ”%s” har inga extraposter" -#: peigen.c:985 pepigen.c:985 +#: xcofflink.c:1478 +msgid "%B: symbol `%s' has unrecognized csect type %d" +msgstr "%B: Symbolen ”%s” har okänd csect-typ %d" + +#: xcofflink.c:1490 +msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" +msgstr "%B: Felaktig XTY_ER-symbol ”%s”: klass %d scnum %d scnlen %d" + +#: xcofflink.c:1519 +msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" +msgstr "%B: XMC_TC0-symbol ”%s” är klass %d scnlen %d" + +#: xcofflink.c:1665 +msgid "%B: csect `%s' not in enclosing section" +msgstr "%B: csect ”%s” är inte i en omslutande sektion" + +#: xcofflink.c:1772 +msgid "%B: misplaced XTY_LD `%s'" +msgstr "%B: Felplacerad XTY_LD ”%s”" + +#: xcofflink.c:2091 +msgid "%B: reloc %s:%d not in csect" +msgstr "%B: omlokalisering %s:%d inte i csect" + +#: xcofflink.c:3182 #, c-format -msgid "%s: line number overflow: 0x%lx > 0xffff" -msgstr "%s: radnummer ger överspill: 0x%lx > 0xffff" +msgid "%s: no such symbol" +msgstr "%s: ingen sÃ¥dan symbol" -#: peigen.c:1002 pepigen.c:1002 +#: xcofflink.c:3287 #, c-format -msgid "%s: reloc overflow 1: 0x%lx > 0xffff" -msgstr "%s: omlokalisering ger överspill 1: 0x%lx > 0xffff" +msgid "warning: attempt to export undefined symbol `%s'" +msgstr "varning: försök att exportera odefinierade symbolen ”%s”" + +#: xcofflink.c:3666 +msgid "error: undefined symbol __rtinit" +msgstr "fel: odefinierad symbol __rtinit" + +#: xcofflink.c:4045 +msgid "%B: loader reloc in unrecognized section `%s'" +msgstr "%B: Laddaromlokalisering i okänd sektion ”%s”" + +#: xcofflink.c:4056 +msgid "%B: `%s' in loader reloc but not loader sym" +msgstr "%B: ”%s” i laddaromlokalisering men inte laddarsym" + +#: xcofflink.c:4072 +msgid "%B: loader reloc in read-only section %A" +msgstr "%B: Laddaromlokalisering i skrivskyddad sektion %A" + +#: xcofflink.c:5094 +#, c-format +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" +msgstr "TOC ger överspill: 0x%lx > 0x10000; prova -mminimal-toc vid kompilering" + +#: peigen.c:1009 pepigen.c:1009 pex64igen.c:1009 +#, c-format +msgid "%s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: radnummer ger överspill: 0x%lx > 0xffff" -#: peigen.c:1016 pepigen.c:1016 +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 msgid "Export Directory [.edata (or where ever we found it)]" -msgstr "Exportkatalog [.edata (eller där vi hittade det)]" +msgstr "Exportkatalog [.edata (eller där vi hittade det)]" -#: peigen.c:1017 pepigen.c:1017 +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 msgid "Import Directory [parts of .idata]" msgstr "Importkatalog [delar av .idata]" -#: peigen.c:1018 pepigen.c:1018 +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 msgid "Resource Directory [.rsrc]" msgstr "Resurskatalog [.rsrc]" -#: peigen.c:1019 pepigen.c:1019 +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 msgid "Exception Directory [.pdata]" msgstr "Undantagskatalog [.pdata]" -#: peigen.c:1020 pepigen.c:1020 +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 msgid "Security Directory" -msgstr "Säkerhetskatalog" +msgstr "Säkerhetskatalog" -#: peigen.c:1021 pepigen.c:1021 +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 msgid "Base Relocation Directory [.reloc]" msgstr "Basomlokaliseringskatalog [.reloc]" -#: peigen.c:1022 pepigen.c:1022 +#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042 msgid "Debug Directory" -msgstr "Felsökningskatalog" +msgstr "Felsökningskatalog" -#: peigen.c:1023 pepigen.c:1023 +#: peigen.c:1043 pepigen.c:1043 pex64igen.c:1043 msgid "Description Directory" msgstr "Beskrivningskatalog" -#: peigen.c:1024 pepigen.c:1024 +#: peigen.c:1044 pepigen.c:1044 pex64igen.c:1044 msgid "Special Directory" msgstr "Specialkatalog" -#: peigen.c:1025 pepigen.c:1025 +#: peigen.c:1045 pepigen.c:1045 pex64igen.c:1045 msgid "Thread Storage Directory [.tls]" -msgstr "Trådlagringskatalog [.tls]" +msgstr "TrÃ¥dlagringskatalog [.tls]" -#: peigen.c:1026 pepigen.c:1026 +#: peigen.c:1046 pepigen.c:1046 pex64igen.c:1046 msgid "Load Configuration Directory" -msgstr "Inläsningskonfigurationskatalog" +msgstr "Inläsningskonfigurationskatalog" -#: peigen.c:1027 pepigen.c:1027 +#: peigen.c:1047 pepigen.c:1047 pex64igen.c:1047 msgid "Bound Import Directory" -msgstr "Katalog över bundna importer" +msgstr "Katalog över bundna importer" -#: peigen.c:1028 pepigen.c:1028 +#: peigen.c:1048 pepigen.c:1048 pex64igen.c:1048 msgid "Import Address Table Directory" msgstr "Importadresstabellkatalog" -#: peigen.c:1029 pepigen.c:1029 +#: peigen.c:1049 pepigen.c:1049 pex64igen.c:1049 msgid "Delay Import Directory" -msgstr "Katalog över fördröjda importer" +msgstr "Katalog över fördröjda importer" + +#: peigen.c:1050 pepigen.c:1050 pex64igen.c:1050 +msgid "CLR Runtime Header" +msgstr "CLR körtidshuvud" -#: peigen.c:1030 peigen.c:1031 pepigen.c:1030 pepigen.c:1031 +#: peigen.c:1051 pepigen.c:1051 pex64igen.c:1051 msgid "Reserved" msgstr "Reserverad" -#: peigen.c:1094 pepigen.c:1094 +#: peigen.c:1111 pepigen.c:1111 pex64igen.c:1111 +#, c-format msgid "" "\n" "There is an import table, but the section containing it could not be found\n" msgstr "" "\n" -"Det finns en importtabell, men sektionen som innehåller den kunde inte hittas\n" +"Det finns en importtabell, men sektionen som innehÃ¥ller den kunde inte hittas\n" -#: peigen.c:1099 pepigen.c:1099 +#: peigen.c:1116 pepigen.c:1116 pex64igen.c:1116 #, c-format msgid "" "\n" "There is an import table in %s at 0x%lx\n" msgstr "" "\n" -"Det finns en importtabell i %s på 0x%lx\n" +"Det finns en importtabell i %s pÃ¥ 0x%lx\n" -#: peigen.c:1136 pepigen.c:1136 +#: peigen.c:1158 pepigen.c:1158 pex64igen.c:1158 #, c-format msgid "" "\n" "Function descriptor located at the start address: %04lx\n" msgstr "" "\n" -"Funktionsidentifierare hittad på startadressen: %04lx\n" +"Funktionsidentifierare hittad pÃ¥ startadressen: %04lx\n" -#: peigen.c:1139 pepigen.c:1139 +#: peigen.c:1161 pepigen.c:1161 pex64igen.c:1161 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" -msgstr "\tkodbas %08lx toc (inläsningsbar/verklig) %08lx/%08lx\n" +msgstr "\tkodbas %08lx toc (inläsningsbar/verklig) %08lx/%08lx\n" -#: peigen.c:1145 pepigen.c:1145 +#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169 +#, c-format msgid "" "\n" "No reldata section! Function descriptor not decoded.\n" @@ -2774,25 +6276,26 @@ msgstr "" "\n" "Ingen reldata-sektion! Funktionsidentifierare avkodades inte.\n" -#: peigen.c:1150 pepigen.c:1150 +#: peigen.c:1174 pepigen.c:1174 pex64igen.c:1174 #, c-format msgid "" "\n" "The Import Tables (interpreted %s section contents)\n" msgstr "" "\n" -"Importtabellerna (tolkade innehåll i %s-sektion)\n" +"Importtabellerna (tolkade innehÃ¥ll i %s-sektion)\n" -# Vad är thunk? -#: peigen.c:1153 pepigen.c:1153 +# Vad är thunk? +#: peigen.c:1177 pepigen.c:1177 pex64igen.c:1177 +#, c-format msgid "" " vma: Hint Time Forward DLL First\n" " Table Stamp Chain Name Thunk\n" msgstr "" -" vma: Tips- Tids- Framåt- DLL- Första\n" -" tabell stämpel kedja namn thunk\n" +" vma: Tips- Tids- FramÃ¥t- DLL- Första\n" +" tabell stämpel kedja namn thunk\n" -#: peigen.c:1204 pepigen.c:1204 +#: peigen.c:1225 pepigen.c:1225 pex64igen.c:1225 #, c-format msgid "" "\n" @@ -2801,27 +6304,39 @@ msgstr "" "\n" "\tDLL-namn: %s\n" -#: peigen.c:1215 pepigen.c:1215 +#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" -msgstr "\tvma: Tips/Ordn Medlemsnamn Bundet till\n" +msgstr "\tvma: Tips/Ordn Medlemsnamn Bundet-till\n" -#: peigen.c:1240 pepigen.c:1240 +#: peigen.c:1261 pepigen.c:1261 pex64igen.c:1261 +#, c-format msgid "" "\n" "There is a first thunk, but the section containing it could not be found\n" msgstr "" "\n" -"Det finns en första thunk, men sektionen som innehåller den kunde inte hittas\n" +"Det finns en första thunk, men sektionen som innehÃ¥ller den kunde inte hittas\n" -#: peigen.c:1380 pepigen.c:1380 +#: peigen.c:1423 pepigen.c:1423 pex64igen.c:1423 +#, c-format msgid "" "\n" "There is an export table, but the section containing it could not be found\n" msgstr "" "\n" -"Det finns en exporttabell, men sektionen som innehåller den kunde inte hittas\n" +"Det finns en exporttabell, men sektionen som innehÃ¥ller den kunde inte hittas\n" + +#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432 +#, c-format +msgid "" +"\n" +"There is an export table in %s, but it does not fit into that section\n" +msgstr "" +"\n" +"Det finns en exporttabell i %s, men den passar inte i den sektionen\n" -#: peigen.c:1385 pepigen.c:1385 +#: peigen.c:1438 pepigen.c:1438 pex64igen.c:1438 #, c-format msgid "" "\n" @@ -2830,7 +6345,7 @@ msgstr "" "\n" "Det finns en exporttabell i %s vid 0x%lx\n" -#: peigen.c:1416 pepigen.c:1416 +#: peigen.c:1466 pepigen.c:1466 pex64igen.c:1466 #, c-format msgid "" "\n" @@ -2838,80 +6353,88 @@ msgid "" "\n" msgstr "" "\n" -"Exporttabellerna (tolkade innehåll i %s-sektion)\n" +"Exporttabellerna (tolkade innehÃ¥ll i %s-sektion)\n" +"\n" -#: peigen.c:1420 pepigen.c:1420 +#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "Exportflaggor \t\t\t%lx\n" -#: peigen.c:1423 pepigen.c:1423 +#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473 #, c-format msgid "Time/Date stamp \t\t%lx\n" -msgstr "Tid-/Datumstämpel \t\t%lx\n" +msgstr "Tid-/Datumstämpel \t\t%lx\n" -#: peigen.c:1426 pepigen.c:1426 +#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" -msgstr "Övre/Undre \t\t\t%d/%d\n" +msgstr "Övre/Undre \t\t\t%d/%d\n" -#: peigen.c:1429 pepigen.c:1429 +#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479 +#, c-format msgid "Name \t\t\t\t" msgstr "Namn \t\t\t\t" -#: peigen.c:1435 pepigen.c:1435 +#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "Ordningsbas \t\t\t%ld\n" -#: peigen.c:1438 pepigen.c:1438 +#: peigen.c:1488 pepigen.c:1488 pex64igen.c:1488 +#, c-format msgid "Number in:\n" msgstr "Tal i:\n" -#: peigen.c:1441 pepigen.c:1441 +#: peigen.c:1491 pepigen.c:1491 pex64igen.c:1491 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "\tExportadresstabell \t\t%08lx\n" -#: peigen.c:1445 pepigen.c:1445 +#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "\t[Namnpekare/Ordningstal]-tabell\t%08lx\n" -#: peigen.c:1448 pepigen.c:1448 +#: peigen.c:1498 pepigen.c:1498 pex64igen.c:1498 +#, c-format msgid "Table Addresses\n" msgstr "Tabelladresser\n" -#: peigen.c:1451 pepigen.c:1451 +#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501 +#, c-format msgid "\tExport Address Table \t\t" msgstr "\tExportadresstabell \t\t" -#: peigen.c:1456 pepigen.c:1456 +#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506 +#, c-format msgid "\tName Pointer Table \t\t" msgstr "\tNamnpekartabell \t\t" -#: peigen.c:1461 pepigen.c:1461 +#: peigen.c:1511 pepigen.c:1511 pex64igen.c:1511 +#, c-format msgid "\tOrdinal Table \t\t\t" -msgstr "\tOrdningstalstabell \t\t\t" +msgstr "\tOrdningstaltabell \t\t\t" -#: peigen.c:1476 pepigen.c:1476 +#: peigen.c:1525 pepigen.c:1525 pex64igen.c:1525 #, c-format msgid "" "\n" "Export Address Table -- Ordinal Base %ld\n" msgstr "" "\n" -"Exportadresstabell -- Orningsbas %ld\n" +"Exportadresstabell -- Ordningsbas %ld\n" -#: peigen.c:1495 pepigen.c:1495 +#: peigen.c:1544 pepigen.c:1544 pex64igen.c:1544 msgid "Forwarder RVA" msgstr "Vidarebefordrar-RVA" -#: peigen.c:1506 pepigen.c:1506 +#: peigen.c:1555 pepigen.c:1555 pex64igen.c:1555 msgid "Export RVA" msgstr "Export-RVA" -#: peigen.c:1513 pepigen.c:1513 +#: peigen.c:1562 pepigen.c:1562 pex64igen.c:1562 +#, c-format msgid "" "\n" "[Ordinal/Name Pointer] Table\n" @@ -2919,24 +6442,19 @@ msgstr "" "\n" "[Ordningstals-/Namnpekar-]tabell\n" -#: peigen.c:1568 pepigen.c:1568 +#: peigen.c:1622 peigen.c:1805 pepigen.c:1622 pepigen.c:1805 pex64igen.c:1622 +#: pex64igen.c:1805 #, c-format msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" -msgstr "Varning, storleken på .pdata-sektionen (%ld) är inte en multipel av %d\n" - -#: peigen.c:1572 pepigen.c:1572 -msgid "" -"\n" -"The Function Table (interpreted .pdata section contents)\n" -msgstr "" -"\n" -"Funktionstabellen (tolkade innehåll från .pdata-sektionen)\n" +msgstr "Varning, storleken pÃ¥ .pdata-sektionen (%ld) är inte en multipel av %d\n" -#: peigen.c:1575 pepigen.c:1575 +#: peigen.c:1629 pepigen.c:1629 pex64igen.c:1629 +#, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr " vma:\t\t\tStartadress Slutadress Ospola information\n" -#: peigen.c:1577 pepigen.c:1577 +#: peigen.c:1631 pepigen.c:1631 pex64igen.c:1631 +#, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" " \t\tAddress Address Handler Data Address Mask\n" @@ -2944,19 +6462,32 @@ msgstr "" " vma:\t\tStart- Slut- EH- EH- Prologsluts- Undantags-\n" " \t\tadress adress hanterare data adress mask\n" -#: peigen.c:1647 pepigen.c:1647 +#: peigen.c:1705 pepigen.c:1705 pex64igen.c:1705 +#, c-format msgid " Register save millicode" msgstr " Registerspara millikod" -#: peigen.c:1650 pepigen.c:1650 +#: peigen.c:1708 pepigen.c:1708 pex64igen.c:1708 +#, c-format msgid " Register restore millicode" -msgstr " Registeråterställ millikod" +msgstr " RegisterÃ¥terställ millikod" -#: peigen.c:1653 pepigen.c:1653 +#: peigen.c:1711 pepigen.c:1711 pex64igen.c:1711 +#, c-format msgid " Glue code sequence" msgstr " Klisterkodsekvens" -#: peigen.c:1705 pepigen.c:1705 +#: peigen.c:1811 pepigen.c:1811 pex64igen.c:1811 +#, c-format +msgid "" +" vma:\t\tBegin Prolog Function Flags Exception EH\n" +" \t\tAddress Length Length 32b exc Handler Data\n" +msgstr "" +" vma:\t\tBörja Prolog Funktionsflaggor Undantag EH\n" +" \t\tAdress Längd Längd 32b exc Handler Data\n" + +#: peigen.c:1937 pepigen.c:1937 pex64igen.c:1937 +#, c-format msgid "" "\n" "\n" @@ -2964,258 +6495,147 @@ msgid "" msgstr "" "\n" "\n" -"PE-filbasomlokaliseringar (tolkat innehåll i .reloc-sektionen)\n" +"PE-filbasomlokaliseringar (tolkat innehÃ¥ll i .reloc-sektionen)\n" -#: peigen.c:1735 pepigen.c:1735 +#: peigen.c:1966 pepigen.c:1966 pex64igen.c:1966 #, c-format msgid "" "\n" "Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n" msgstr "" "\n" -"Virtuell adress: %08lx Områdesstorlek %ld (0x%lx) Antal fixar %ld\n" +"Virtuell adress: %08lx OmrÃ¥desstorlek %ld (0x%lx) Antal fixar %ld\n" -#: peigen.c:1748 pepigen.c:1748 +#: peigen.c:1979 pepigen.c:1979 pex64igen.c:1979 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" -msgstr "\tomlokalisering %4d avstånd %4x [%4lx] %s" +msgstr "\tomlokalisering %4d avstÃ¥nd %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:1788 pepigen.c:1788 +#: peigen.c:2023 pepigen.c:2023 pex64igen.c:2023 #, c-format -msgid "" -"\n" -"Characteristics 0x%x\n" -msgstr "" -"\n" -"Karakteristik 0x%x\n" - -#~ msgid "%s: Unknown special linker type %d" -#~ msgstr "%s: Okänd speciallänkartyp %d" - -#~ msgid "v850ea architecture" -#~ msgstr "v850ea-arkitektur" - -#~ msgid "%s: Section %s is too large to add hole of %ld bytes" -#~ msgstr "%s: Sektionen %s är för stor för att stoppa hål med %ld byte i" - -#~ msgid "Error: out of memory" -#~ msgstr "Fel: slut på minne" - -#~ msgid "warning: relocation against removed section; zeroing" -#~ msgstr "varning: omlokalisering mot borttagen sektion; nollställer" +msgid "%*.s Entry: " +msgstr "%*.s Post: " -#~ msgid "warning: relocation against removed section" -#~ msgstr "varning: omlokalisering mot borttagen sektion" - -#~ msgid "local symbols in discarded section %s" -#~ msgstr "lokala symboler i bortkastade sektionen %s" - -#~ msgid "%s: linking abicalls files with non-abicalls files" -#~ msgstr "%s: länkar abicalls-filer med icke-abicalls-filer" - -#~ msgid "%s: ISA mismatch (-mips%d) with previous modules (-mips%d)" -#~ msgstr "%s: ISA (-mips%d) passar inte med tidigare moduler (-mips%d)" - -#~ msgid "%s: ISA mismatch (%d) with previous modules (%d)" -#~ msgstr "%s: ISA (%d) passar inte med tidigare moduler (%d)" - -#~ msgid "%s: dynamic relocation against speculation fixup" -#~ msgstr "%s: dynamisk omlokalisering utan spekulationsfixar" - -#~ msgid "%s: speculation fixup against undefined weak symbol" -#~ msgstr "%s: spekulationsfix mot odefinierad svag symbol" - -#~ msgid "\tThe Import Address Table (difference found)\n" -#~ msgstr "\tImportadresstabellen (skillnad hittad)\n" - -#~ msgid "\t>>> Ran out of IAT members!\n" -#~ msgstr "\t>>> Slut på IAT-medlemmar!\n" - -#~ msgid "\tThe Import Address Table is identical\n" -#~ msgstr "\tImportadresstabellen är identisk\n" - -# Ska vara blanksteg här tror jag -#~ msgid "BFD %sinternal error, aborting at %s line %d\n" -#~ msgstr "Internt BFD %s-fel, avbryter vid %s rad %d\n" - -#~ msgid "GP relative relocation when GP not defined" -#~ msgstr "GP-relativ omlokalisering då GP inte är definierad" - -#~ msgid "%s: ERROR: passes floats in float registers whereas target %s uses integer registers" -#~ msgstr "%s: FEL: skickar flyttal i flyttalsregister där målet %s istället använder heltalsregister" - -#~ msgid "%s: ERROR: passes floats in integer registers whereas target %s uses float registers" -#~ msgstr "%s: FEL: skickar flyttal i heltalsregister där målet %s istället använder flyttalsregister" - -#~ msgid "Warning: input file %s supports interworking, whereas %s does not." -#~ msgstr "Varning: indatafilen %s stöder samverkande, medan %s däremot inte gör det." - -#~ msgid "Warning: input file %s does not support interworking, whereas %s does." -#~ msgstr "Varning: indatafilen %s stöder inte samverkande, medan %s däremot gör det." - -#~ msgid "AUX tagndx %ld ttlsiz 0x%lx lnnos %ld next %ld" -#~ msgstr "AUX tagndx %ld ttlsiz 0x%lx radnummer %ld nästa %ld" - -#~ msgid "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n" -#~ msgstr "elf_symbol_from_bfd_symbol 0x%.8lx, namn = %s, symbolnr = %d, flaggor = 0x%.8lx%s\n" - -#~ msgid "Warning: Not setting interwork flag of %s since it has already been specified as non-interworking" -#~ msgstr "Varning: Ställer inte in samverkandeflaggan för %s eftersom den redan har angivits som inte samverkande" - -#~ msgid "Warning: Clearing the interwork flag of %s due to outside request" -#~ msgstr "Varning: Stänger av samverkandeflaggan för %s på grund av utomstående begäran" - -#~ msgid " [APCS-26]" -#~ msgstr " [APCS-26]" - -#~ msgid " [APCS-32]" -#~ msgstr " [APCS-32]" - -#~ msgid "(unknown)" -#~ msgstr "(okänd)" - -# Skumt! -#~ msgid " previously %s in %s" -#~ msgstr " tidigare %s i %s" - -#~ msgid "Symbol `%s' has differing types: %s in %s" -#~ msgstr "Symbolen \"%s\" har olika typer: %s i %s" - -# Alla dessa känns onödiga, borde rapporteras -#~ msgid "ETIR_S_C_STO_GBL: no symbol \"%s\"" -#~ msgstr "ETIR_S_C_STO_GBL: ingen symbol \"%s\"" - -#~ msgid "ETIR_S_C_STO_CA: no symbol \"%s\"" -#~ msgstr "ETIR_S_C_STO_CA: ingen symbol \"%s\"" - -#~ msgid "ETIR_S_C_STO_RB/AB: Not supported" -#~ msgstr "ETIR_S_C_STO_RB/AB: Stöds inte" - -#~ msgid "ETIR_S_C_STO_LP_PSB: Not supported" -#~ msgstr "ETIR_S_C_STO_LP_PSB: Stöds inte" - -#~ msgid "ETIR_S_C_STO_HINT_GBL: not implemented" -#~ msgstr "ETIR_S_C_STO_HINT_GBL: inte implementerat" - -#~ msgid "ETIR_S_C_STO_HINT_PS: not implemented" -#~ msgstr "ETIR_S_C_STO_HINT_PS: inte implementerat" - -#~ msgid "ETIR_S_C_OPR_INSV: Not supported" -#~ msgstr "ETIR_S_C_OPR_INSV: Stöds inte" - -#~ msgid "ETIR_S_C_OPR_USH: Not supported" -#~ msgstr "ETIR_S_C_OPR_USH: Stöds inte" - -#~ msgid "ETIR_S_C_OPR_ROT: Not supported" -#~ msgstr "ETIR_S_C_OPR_ROT: Stöds inte" - -#~ msgid "ETIR_S_C_OPR_REDEF: Not supported" -#~ msgstr "ETIR_S_C_OPR_REDEF: Stöds inte" - -#~ msgid "ETIR_S_C_OPR_DFLIT: Not supported" -#~ msgstr "ETIR_S_C_OPR_DFLIT: Stöds inte" - -#~ msgid "ETIR_S_C_STC_LP: not supported" -#~ msgstr "ETIR_S_C_STC_LP: stöds inte" - -#~ msgid "ETIR_S_C_STC_GBL: not supported" -#~ msgstr "ETIR_S_C_STC_GBL: stöds inte" - -#~ msgid "ETIR_S_C_STC_GCA: not supported" -#~ msgstr "ETIR_S_C_STC_GCA: stöds inte" +#: peigen.c:2043 pepigen.c:2043 pex64igen.c:2043 +#, c-format +msgid "name: [val: %08lx len %d]: " +msgstr "namn: [vär: %08lx län %d]: " -#~ msgid "ETIR_S_C_STC_PS: not supported" -#~ msgstr "ETIR_S_C_STC_PS: stöds inte" +#: peigen.c:2054 pepigen.c:2054 pex64igen.c:2054 +#, c-format +msgid "" +msgstr "" -#~ msgid "Unimplemented STO cmd %d" -#~ msgstr "Oimplementerat STO-kommando %d" +#: peigen.c:2057 pepigen.c:2057 pex64igen.c:2057 +#, c-format +msgid "" +msgstr "" -#~ msgid "TIR_S_C_OPR_ASH incomplete" -#~ msgstr "TIR_S_C_OPR_ASH ofullständigt" +#: peigen.c:2060 pepigen.c:2060 pex64igen.c:2060 +#, c-format +msgid "ID: %#08lx" +msgstr "ID: %#08lx" -#~ msgid "TIR_S_C_OPR_USH incomplete" -#~ msgstr "TIR_S_C_OPR_USH ofullständigt" +#: peigen.c:2063 pepigen.c:2063 pex64igen.c:2063 +#, c-format +msgid ", Value: %#08lx\n" +msgstr ", Värde: %#08lx\n" -#~ msgid "TIR_S_C_OPR_ROT incomplete" -#~ msgstr "TIR_S_C_OPR_ROT ofullständigt" +#: peigen.c:2074 pepigen.c:2074 pex64igen.c:2074 +#, c-format +msgid "%*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" +msgstr "%*.s Löv: Adr: %#08lx, Storlek: %#08lx, Kodsida: %d\n" -#~ msgid "TIR_S_C_OPR_REDEF not supported" -#~ msgstr "TIR_S_C_OPR_REDEF stöds inte" +#: peigen.c:2116 pepigen.c:2116 pex64igen.c:2116 +#, c-format +msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" +msgstr " Tabell: Char: %d, Tid: %08lx, Ver: %d/%d, Num namn: %d, IDs: %d\n" -#~ msgid "TIR_S_C_OPR_DFLIT not supported" -#~ msgstr "TIR_S_C_OPR_DFLIT stöds inte" +#: peigen.c:2204 pepigen.c:2204 pex64igen.c:2204 +#, c-format +msgid "Corrupt .rsrc section detected!\n" +msgstr "Felaktig .rsrc-sektion upptäckt!\n" -#~ msgid "TIR_S_C_CTL_DFLOC not fully implemented" -#~ msgstr "TIR_S_C_CTL_DFLOC är inte fullständigt implementerat" +#: peigen.c:2220 pepigen.c:2220 pex64igen.c:2220 +#, c-format +msgid "" +"\n" +"WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n" +msgstr "" +"\n" +"VARNING: Extra data i .rsrc-sektionen - det kommer att ignoreras av Windows:\n" -#~ msgid "TIR_S_C_CTL_STLOC not fully implemented" -#~ msgstr "TIR_S_C_CTL_STLOC är inte fullständigt implementerat" +#. The MS dumpbin program reportedly ands with 0xff0f before +#. printing the characteristics field. Not sure why. No reason to +#. emulate it here. +#: peigen.c:2243 pepigen.c:2243 pex64igen.c:2243 +#, c-format +msgid "" +"\n" +"Characteristics 0x%x\n" +msgstr "" +"\n" +"Karakteristik 0x%x\n" -#~ msgid "TIR_S_C_CTL_STKDL not fully implemented" -#~ msgstr "TIR_S_C_CTL_STKDL är inte fulständigt implementerat" +#: peigen.c:3194 pepigen.c:3194 pex64igen.c:3194 +#, c-format +msgid ".rsrc merge failure: duplicate string resource: %d" +msgstr ".rsrc sammanfogningsfel: dubblerad strängresurs: %d" -# This is broken -# -# fprintf (file, -# _("\nThe Import Tables (interpreted %s section contents)\n"), -# section->name); -# fprintf (file, -# _(" vma: Hint Time Forward DLL First\n")); -# fprintf (file, -# _(" Table Stamp Chain Name Thunk\n")); -# -#~ msgid " vma: Hint Time Forward DLL First\n" -#~ msgstr " vma: Tips- Tids- V.bef.- DLL- Första\n" +#: peigen.c:3329 pepigen.c:3329 pex64igen.c:3329 +msgid ".rsrc merge failure: multiple non-default manifests" +msgstr ".rsrc sammanfogningsfel: multipla ej-standard manifest" -#~ msgid " \t\tAddress Address Handler Data Address Mask\n" -#~ msgstr " \t\tadress adress hanterare data adress mask\n" +#: peigen.c:3347 pepigen.c:3347 pex64igen.c:3347 +msgid ".rsrc merge failure: a directory matches a leaf" +msgstr ".rsrc sammanfogningsfel: en katalog matchar ett löv" -#~ msgid "integer" -#~ msgstr "heltal" +#: peigen.c:3389 pepigen.c:3389 pex64igen.c:3389 +msgid ".rsrc merge failure: duplicate leaf" +msgstr ".rsrc sammanfogningsfel: dubblerat löv" -#~ msgid "float" -#~ msgstr "flyttal" +#: peigen.c:3391 pepigen.c:3391 pex64igen.c:3391 +#, c-format +msgid ".rsrc merge failure: duplicate leaf: %s" +msgstr ".rsrc sammanfogningsfel: dubblerat löv: %s" -#~ msgid "soft" -#~ msgstr "mjuk" +#: peigen.c:3457 pepigen.c:3457 pex64igen.c:3457 +msgid ".rsrc merge failure: dirs with differing characteristics\n" +msgstr ".rsrc sammanfogningsfel: kataloger med olika karakteristik\n" -#~ msgid "hard" -#~ msgstr "hård" +#: peigen.c:3464 pepigen.c:3464 pex64igen.c:3464 +msgid ".rsrc merge failure: differing directory versions\n" +msgstr ".rsrc sammanfogningsfel: olika katalogversioner\n" -# _bfd_error_handler (_("# Warning: %s %s interworking, whereas %s %s"), -# bfd_get_filename (ibfd), -# in_flags & EF_INTERWORK ? _("supports") : _("does not support"), -# bfd_get_filename (obfd), -# out_flags & EF_INTERWORK ? _("does not") : _("does")); -# -# This is broken -# -# Don't split a sentence like this, use multiple full messages instead -# -#~ msgid "Warning: %s %s interworking, whereas %s %s" -#~ msgstr "Varning: %s %s samverkande, medan %s %s" +#. Corrupted .rsrc section - cannot merge. +#: peigen.c:3537 pepigen.c:3537 pex64igen.c:3537 +#, c-format +msgid "%s: .rsrc merge failure: corrupt .rsrc section" +msgstr "%s: .rsrc sammanfogningsfel: felaktigt .rsrc-sektion" -#~ msgid "supports" -#~ msgstr "stöder" +#: peigen.c:3673 pepigen.c:3673 pex64igen.c:3673 +msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%B: Kunde inte fylla i DataDictionary[1] eftersom .idata$2 saknas" -#~ msgid "does not" -#~ msgstr "inte gör det" +#: peigen.c:3693 pepigen.c:3693 pex64igen.c:3693 +msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%B: Kunde inte fylla i DataDictionary[1] eftersom .data$4 saknas" -#~ msgid "does" -#~ msgstr "gör det" +#: peigen.c:3714 pepigen.c:3714 pex64igen.c:3714 +msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%B: Kunde inte fylla i DataDictionary[12] eftersom .idata$5 saknas" -#~ msgid "%s(%s+0x%lx): cannot find stub entry %s" -#~ msgstr "%s(%s+0x%lx): kan inte hitta stubbstarten %s" +#: peigen.c:3734 pepigen.c:3734 pex64igen.c:3734 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%B: Kunde inte fylla i DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] eftersom .idata$6 saknas" -#~ msgid "%s(%s+0x%lx): cannot relocate %s, recompile with -ffunction-sections" -#~ msgstr "%s(%s+0x%lx): kan inte omlokalisera %s, kompilera om med -ffunction-sections" +#: peigen.c:3776 pepigen.c:3776 pex64igen.c:3776 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" +msgstr "%B: Kunde inte fylla i DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] eftersom .idata$6 saknas" -#~ msgid "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n" -#~ msgstr "skapar sektionssymbol, namn = %s, värde = 0x%.8lx, index = %d, sektion = 0x%.8lx\n" +#: peigen.c:3801 pepigen.c:3801 pex64igen.c:3801 +msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%B: Kunde inte fylla i DataDictionary[9] eftersom __tls_used saknas" -# Hmm -#~ msgid " whereas segment starts at 0x%x" -#~ msgstr " där segmentet börjar vid 0x%x" +#~ msgid "%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section ”%A” is out of range" +#~ msgstr "%B: adderade -0x%x i omlokalisering %s mot symbolen ”%s” vid 0x%lx i sektionen ”%A” är utanför intervallet" diff --git a/bfd/po/zh_CN.gmo b/bfd/po/zh_CN.gmo index 4abd415255da3396ddafed8e5b64acbdbb5c50cb..50ce6af769606a933ed30208141e38d0b613f4f2 100644 GIT binary patch delta 5775 zcma*q33OD|0mktgmM97&fGmLsk0mh)1jvL$wgeDS0 zQqRF=ct2_`^Q|lK8tUaC{l+|L8}=jrOeHTp@NMjlUt=7$V>FD|495024)wX|cs;Jc z7~F%p&#S0`e1z(-9yQR*w%&wUwWog*ML}P@0riDp$UiflmyS5ywl79)#d_o(W)Er$ zUdBmShb|n<=n~M2Q*bk8;y0LusobPDE=0cy`zU1KIr~Noqv=C^Bo4*7s4Y2)n(61L z4k8$xwjv3&b(z=~$D=;K2(|Zn@diAN8t~UR0Ao6_|7jE^b_#d6618VXQ8#?Wwtt8^ zOieievMs9PIMh-Pu#QFknOt6UpHl3Jt593{9C9o3F>2!fh-LlzQHWz&`odkPJWoA&T}>zrHL#hey)Q);*Q`b+Zz}BjRelQ1X*h%0 z`_GVjnM(Wsf{+VOt#|)-1lHE!cpX;U{j~tXnX{;Y{1Y=UiRC;QVayEF_j|L<@+Q=MCnvN1494Wsppgbpd%xe-PumYxqn7ep zYe$Z{>KUlVb{gsz&1>t=phLY9HIa|37f^@%2h>1f{Tx{p`l9yaX6qzuK|K$fq0iPA zSXbdSv~RXPWqlT-Xg`YT=ndpJn0jk8%cGh1xB5p@&6UQ^G%J38*bivyR1R>eFp~E;10mSx|C`1@@u79knHIV`!p&3Yy79>%UMpYL*$Ec~8{RXJQOyVSCI)&1k-L1NNf6-_}1y z{?M7r7>n)M&oS5!X)=qg{u8!fhK6r21Sjx;0_1@(Rj3<$gBp1&_Dgn04ImA*MPrda z8zvid+E-Z*p|<3Y*1w`A^d+(de)BB_tw1bCSTjt-&Nv*qVvcpGZQq63vXiLqT|#Zu z52%484i6u)!PW_=Et-K^xrL~u--sRb{O_coy?P0?_a|-rGOB~`uoGUzuTDqojylDe zsP;*=UWD5FWvC9fqgLuLYGALT4)Iy*1#C;{QD_T9$XnJtUn>CEELU$!@ZhFa~p+ z%prP~b?J%V(GH!17HZ(yA11V-CAQqaYzo;#zcnv}8~vfb({3tS>NmrU=0&TPZabl)}B_ZBj@kk*A2R)7ryKvRXBJCFAvECs{@IkSel} z=-NewkoQR(8ANow9D3!ipS6LzDBMCGAYI8rq$O!bhHc=*MRdJI9we0{NOWx@_k~LQ zU(njvdP)Yrih8E8Q|K=A`sQWiWP4^N7kcyD1yhYP#WvnskX;;nq|Kk3wn{4T%=CEY zc#<4@1w1h+T~b}iIr+s-p0^~Yz}?F+>HVOf**6yXZ)jEReAb=w4ILW!q1ztHWB zbZ6(eeZf;5lNvW2H(|`M+k%&_ZxcCYN_I|uMoN0<4*8y9ZWn5?eS}+bvh$o-?%d*h zugA&vcq`5x!E3%x7hJ-iH%2Z=Zu7=XY6xY828prMPd40w%lry`3T3;vImpdb0UoG*u14Z#Swe`#@DJt^%bSs~`z?++`sRRzj zcZnL2dgZ6zh>yQT_i(3N(QZO*uAgh0edQg(pG=*d7W^!}XGDvXWLJvQH+7)PmE1Qi z7?Thg5s@Br5_kOa2?!kT^?sl%`Ap;L7nTL{dOJ40Kd;1rNIhMYQIC)K`_&Ke48^{JGj4%WEo*1TUnvj%Z%9 ze{=1lD{J>ZU43+AFf#4Sh{)>7()tzqf`3n6+KBSQHD!B)^9Lk09{2woptxC1b>;rL ztxL~u*iwJsK>e!4bw{48Ilj@dV*F z?b}te?)ku-8K;`pEPLqulHInUOXik7HS5Z&tG3s!stC84^V_%7mM*HVT3)w%wUa>4 zHDwRiJ$*3I*zdfTnVt|{;qWL;xWcHzr>gqJKwa=y-LXLJV@m@~hl~q!8`3W6#j3gu zyV;?dimla^dz@RxJ2j=pLubHor#e@BC4b0IN9(`a8;;h`v~jflx0Rz6STtnQe*niR BiKhSn delta 4404 zcmYk;d323u0>|;^N*aVDgeW3%qa?W@kyR40B@LQxV{DaTERj*2NQkAX%neluX-oT3 zO=^iUL#0(*GgYJxrx=~3L#uP9w5AhSEU#kiZ~gTrOj-b<$O1{u^dYPrQLWFu02`R80)VVhZa0Db|J7^{CJ7 z!oKK3H(tPK{2s%N@tSU3jmhCcEb?b&^Wwq97=hbS9Un#w@Xy!{TdcQ`dzmiWO~zm- zrea6T#SnbNT8P24=lb;;Q*JM;#O}ONh5d0GK7gli05&0irZc_YkI|^lWnvUg!(O-? z)xjpzfOgpS0o3=7p+5HshSI-T2 z4^72<9D#LMfLAaHJ#-?c;Bc%&uP&UXG8lirQP`hhY72@{Guwdb;2mU)<}+l~&9|70 zw@{x?WVG7rCom3|q6WMjv+*=$;9XRI8NJwl?NKr7p$lcG4t5}uGCtIv{|WWEMjVLO zQCkzqaz)}u)I_FYI<7~3{sd~E=TL|75;8~g9kM8o+o%pm4*Cf=4 zpF$02Ir0&+!(Kmb{Tu3V{R=hI8`uH=hnis^y=cIZsE%S$6DvRumZ1jbt)b#yBGeLI z!a*3!L(1e#CJx03s2jX&J&an3&ruzGk9^hiaJLR51GPdUFaZlu{j5Qbi+K&1u-ELT zqBl;WM)V1)9T3wx!wBTwCKffbF{m3%NA2Mf)WE7yD|isKVjo(+!iQ)F$?=M8HT$OFtqPFOu zz5WqufR~ZQFxSzm8+GMj9gcZ;+GR`yYCvN+De_6w7fVrxXB96zfu-UeB-GQf470H^f%VsglU#7)-%&HTVGUrNb*Lgx14*|&gkiL&SxZpA@hh++ zuD9(?);BSj>j$jItY-$Y{<_h5E~ulgkjeWuNXD~Kn$b9G5$bbGQCqaxUav=W@PTcg zv+c{M`!}P`!q3fi-rG0Yn{8P8x2M)9obC%F)3;A+(M zuQ4C{@+f6sk+lZ(%lI*B?*rL)Ze_f&RMMzSM7GUTq4x9;YVSVAP`qh%rL=yr3vw?r z0^L}OTCok*_iza9E67((kJQ$F#-e_xo>aJy1}!kL$VIl z!G7$9C++(eQ5`m7C%lO|?RQWE>%gy;+Wk=jPC}iXv8el&+x8aJ3Y|ioKl3RS4!&u} zuzO$<>KAb|YQz=RU8t2ggE~Z)P@lhzLD-%B(EE|7vyqJIXeMfc<){g)wr3F^ChZ@5f*yW}>!a0&3}>Ms>6T z`{D-F*6hbD^nOXjMddKjOf`BHJ|k`3e`vX2}j1%#D1FOWS%Wg_`K(T|uzROYwh-x?iE zj+c3ZEVI|w;uGXJ{hMuM7GWp+r}sHj(WBB{Qv$3P*Hh@tS1kXD$-Woq_UqZB)@IDh>zL&7!0)aD9pBX@i>`r zPg_+TRJSVHf31Lu9;awhNfwg_$yhRvs5Fp%M8AkC8_5oTjsMGGwXGk(e3DDvC8Nn^ zqVhKRHAzu}qW^#RAA_*gw*Ti-)l{;D%vOW)DETERB_6Vyyho-ImGQ0kf0kdf^%b~= z#M-tPZ0o_+KWg@aY~v{Akw?gM(uAeL*4V!Qp;+?^9)1CUb80Yi2GtPnd&Ak^bp0#*hk$XXTSyAzvCFRBL_|h_W>8$z1 z9_Ja)Fz1qIq?3{m\n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.4\n" +"X-Generator: Poedit 1.8.6\n" "Plural-Forms: nplurals=1; plural=0;\n" #: aout-adobe.c:127 @@ -28,7 +28,7 @@ msgstr "%s:a.out.adobe 文件中节的类型未知:%x\n" #: aout-cris.c:200 #, c-format msgid "%s: Invalid relocation type exported: %d" -msgstr "%s:导出无效的重定位类型:%d" +msgstr "%s:导出了无效的重定位类型:%d" #: aout-cris.c:243 #, fuzzy @@ -133,11 +133,11 @@ msgstr "不可识别的文件格式" #: bfd.c:424 msgid "File format is ambiguous" -msgstr "二义性的文件格式" +msgstr "存有歧义的文件格式" #: bfd.c:425 msgid "Section has no contents" -msgstr "节没有内容" +msgstr "节不含内容" #: bfd.c:426 msgid "Nonrepresentable section on output" @@ -166,7 +166,7 @@ msgstr "读取%s 时出错" #: bfd.c:432 msgid "#" -msgstr "#<无效的错误码>" +msgstr "#<无效错误码>" #: bfd.c:1046 #, c-format @@ -1070,15 +1070,11 @@ msgstr "字符值超出可接受的范围以外" #: elf32-arm.c:10670 elf32-nios2.c:3525 elf32-tic6x.c:2740 #: /src/binutils-gdb/bfd/elfnn-aarch64.c:4485 -#, fuzzy msgid "unsupported relocation" -msgstr "" -"\n" -"重定位节 " +msgstr "不支持的重定位" #: elf32-arm.c:10678 elf32-nios2.c:3535 elf32-tic6x.c:2748 #: /src/binutils-gdb/bfd/elfnn-aarch64.c:4493 -#, fuzzy msgid "unknown error" msgstr "未知错误" @@ -1763,22 +1759,18 @@ msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" msgstr "" #: elf32-i386.c:3610 elf64-x86-64.c:3777 -#, fuzzy msgid "hidden symbol" -msgstr "无符号" +msgstr "隐藏符号" #: elf32-i386.c:3613 elf64-x86-64.c:3780 -#, fuzzy msgid "internal symbol" -msgstr "<内部数据>" +msgstr "内部符号" #: elf32-i386.c:3616 elf64-x86-64.c:3783 -#, fuzzy msgid "protected symbol" -msgstr "无符号" +msgstr "受保护符号" #: elf32-i386.c:3619 elf64-x86-64.c:3786 -#, fuzzy msgid "symbol" msgstr "符号" @@ -1866,9 +1858,9 @@ msgid ": m32rx instructions" msgstr ":m32rx 指令" #: elf32-m32r.c:3557 -#, fuzzy, c-format +#, c-format msgid ": m32r2 instructions" -msgstr "为 m32r2 编译" +msgstr ": m32r2 指令" #: elf32-m68hc1x.c:1114 #, c-format @@ -1913,49 +1905,49 @@ msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" msgstr "" #: elf32-m68hc1x.c:1430 elf32-xgate.c:677 -#, fuzzy, c-format +#, c-format msgid "[abi=32-bit int, " -msgstr "使用 32 位 ABI" +msgstr "[abi=32-bit int, " #: elf32-m68hc1x.c:1432 elf32-xgate.c:679 -#, fuzzy, c-format +#, c-format msgid "[abi=16-bit int, " -msgstr "指定一个 ABI" +msgstr "[abi=16-bit int, " #: elf32-m68hc1x.c:1435 elf32-xgate.c:682 -#, fuzzy, c-format +#, c-format msgid "64-bit double, " -msgstr "使用 64 位 long double" +msgstr "64-bit double, " #: elf32-m68hc1x.c:1437 elf32-xgate.c:684 -#, fuzzy, c-format +#, c-format msgid "32-bit double, " -msgstr "指针是 32 位" +msgstr "32-bit double, " #: elf32-m68hc1x.c:1440 -#, fuzzy, c-format +#, c-format msgid "cpu=HC11]" -msgstr ",不明 CPU" +msgstr "cpu=HC11]" #: elf32-m68hc1x.c:1442 -#, fuzzy, c-format +#, c-format msgid "cpu=HCS12]" -msgstr ",不明 CPU" +msgstr "cpu=HCS12]" #: elf32-m68hc1x.c:1444 -#, fuzzy, c-format +#, c-format msgid "cpu=HC12]" -msgstr ",不明 CPU" +msgstr "cpu=HC12]" #: elf32-m68hc1x.c:1447 -#, fuzzy, c-format +#, c-format msgid " [memory=bank-model]" -msgstr "内存\n" +msgstr " [memory=bank-model]" #: elf32-m68hc1x.c:1449 -#, fuzzy, c-format +#, c-format msgid " [memory=flat]" -msgstr "内存\n" +msgstr " [memory=flat]" #: elf32-m68hc1x.c:1452 #, fuzzy, c-format @@ -2877,14 +2869,14 @@ msgid "private flags = %lx: " msgstr "私有标志 = %lx:" #: elf32-v850.c:2558 -#, fuzzy, c-format +#, c-format msgid "unknown v850 architecture" -msgstr "未知的体系结构 %s" +msgstr "未知的 v850 体系结构" #: elf32-v850.c:2560 -#, fuzzy, c-format +#, c-format msgid "v850 E3 architecture" -msgstr "为 v850 处理器编译" +msgstr "v850 e3 体系结构" #: elf32-v850.c:2562 elf32-v850.c:2572 #, c-format @@ -2902,24 +2894,24 @@ msgid "v850e architecture" msgstr "v850e 体系结构" #: elf32-v850.c:2574 -#, fuzzy, c-format +#, c-format msgid "v850e1 architecture" -msgstr "为 v850e1 处理器编译" +msgstr "v850e1 体系结构" #: elf32-v850.c:2575 -#, fuzzy, c-format +#, c-format msgid "v850e2 architecture" -msgstr "为 v850e2 处理器编译" +msgstr "v850e2 体系结构" #: elf32-v850.c:2576 -#, fuzzy, c-format +#, c-format msgid "v850e2v3 architecture" -msgstr "为 v850e2v3 处理器编译" +msgstr "v850e2v3 体系结构" #: elf32-v850.c:2577 -#, fuzzy, c-format +#, c-format msgid "v850e3v5 architecture" -msgstr "ESA/390 结构" +msgstr "v850e3v5 体系结构" #: elf32-vax.c:532 #, c-format @@ -2927,14 +2919,14 @@ msgid " [nonpic]" msgstr "" #: elf32-vax.c:535 -#, fuzzy, c-format +#, c-format msgid " [d-float]" -msgstr "<无名浮点数:" +msgstr "" #: elf32-vax.c:538 -#, fuzzy, c-format +#, c-format msgid " [g-float]" -msgstr "<无名浮点数:" +msgstr "" #: elf32-vax.c:656 #, c-format @@ -5989,9 +5981,8 @@ msgid "GALAXY " msgstr "" #: vms-alpha.c:7384 -#, fuzzy msgid "*unknown* " -msgstr "<未知>" +msgstr "*未知* " #: vms-alpha.c:7387 #, fuzzy, c-format @@ -6034,9 +6025,9 @@ msgid " Shared image : 0x%08x 0x%08x\n" msgstr "回溯到 %-24.24s (0x%08x)\n" #: vms-alpha.c:7428 -#, fuzzy, c-format +#, c-format msgid "cannot read EIHI\n" -msgstr "无法读入头" +msgstr "无法读入 EIHI\n" #: vms-alpha.c:7431 #, c-format @@ -6119,7 +6110,6 @@ msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" msgstr "" #: vms-alpha.c:7546 -#, fuzzy msgid "NORMAL" msgstr "一般" @@ -6480,9 +6470,8 @@ msgid "Delay Import Directory" msgstr "延迟导入目录" #: peigen.c:1050 pepigen.c:1050 pex64igen.c:1050 -#, fuzzy msgid "CLR Runtime Header" -msgstr "运行时名称。" +msgstr "CLR 运行时标头" #: peigen.c:1051 pepigen.c:1051 pex64igen.c:1051 msgid "Reserved" diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c index ea54d62..afb6ce0 100644 --- a/bfd/ppcboot.c +++ b/bfd/ppcboot.c @@ -465,6 +465,7 @@ ppcboot_bfd_print_private_bfd_data (bfd *abfd, void * farg) #define ppcboot_bfd_link_split_section _bfd_generic_link_split_section #define ppcboot_get_section_contents_in_window \ _bfd_generic_get_section_contents_in_window +#define ppcboot_bfd_link_check_relocs _bfd_generic_link_check_relocs #define ppcboot_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data #define ppcboot_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data diff --git a/bfd/reloc.c b/bfd/reloc.c index 3ef704f..0e5fde2 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -586,16 +586,6 @@ bfd_perform_relocation (bfd *abfd, asymbol *symbol; symbol = *(reloc_entry->sym_ptr_ptr); - if (bfd_is_abs_section (symbol->section) - && output_bfd != NULL) - { - reloc_entry->address += input_section->output_offset; - return bfd_reloc_ok; - } - - /* PR 17512: file: 0f67f69d. */ - if (howto == NULL) - return bfd_reloc_undefined; /* If we are not producing relocatable output, return an error if the symbol is not defined. An undefined weak symbol is @@ -608,7 +598,7 @@ bfd_perform_relocation (bfd *abfd, /* If there is a function supplied to handle this relocation type, call it. It'll return `bfd_reloc_continue' if further processing can be done. */ - if (howto->special_function) + if (howto && howto->special_function) { bfd_reloc_status_type cont; cont = howto->special_function (abfd, reloc_entry, symbol, data, @@ -618,6 +608,17 @@ bfd_perform_relocation (bfd *abfd, return cont; } + if (bfd_is_abs_section (symbol->section) + && output_bfd != NULL) + { + reloc_entry->address += input_section->output_offset; + return bfd_reloc_ok; + } + + /* PR 17512: file: 0f67f69d. */ + if (howto == NULL) + return bfd_reloc_undefined; + /* Is the address of the relocation really within the section? Include the size of the reloc in the test for out of range addresses. PR 17512: file: c146ab8b, 46dff27f, 38e53ebf. */ @@ -981,16 +982,11 @@ bfd_install_relocation (bfd *abfd, bfd_byte *data; symbol = *(reloc_entry->sym_ptr_ptr); - if (bfd_is_abs_section (symbol->section)) - { - reloc_entry->address += input_section->output_offset; - return bfd_reloc_ok; - } /* If there is a function supplied to handle this relocation type, call it. It'll return `bfd_reloc_continue' if further processing can be done. */ - if (howto->special_function) + if (howto && howto->special_function) { bfd_reloc_status_type cont; @@ -1005,6 +1001,15 @@ bfd_install_relocation (bfd *abfd, return cont; } + if (bfd_is_abs_section (symbol->section)) + { + reloc_entry->address += input_section->output_offset; + return bfd_reloc_ok; + } + + /* No need to check for howto != NULL if !bfd_is_abs_section as + it will have been checked in `bfd_perform_relocation already'. */ + /* Is the address of the relocation really within the section? */ octets = reloc_entry->address * bfd_octets_per_byte (abfd); if (octets + bfd_get_reloc_size (howto) @@ -1375,7 +1380,8 @@ _bfd_final_link_relocate (reloc_howto_type *howto, } return _bfd_relocate_contents (howto, input_bfd, relocation, - contents + address); + contents + + address * bfd_octets_per_byte (input_bfd)); } /* Relocate a given location using a given value and howto. */ @@ -2304,6 +2310,11 @@ ENUMDOC microMIPS PC-relative relocations. ENUM + BFD_RELOC_MIPS16_16_PCREL_S1 +ENUMDOC + MIPS16 PC-relative relocation. + +ENUM BFD_RELOC_MIPS_21_PCREL_S2 ENUMX BFD_RELOC_MIPS_26_PCREL_S2 @@ -3667,6 +3678,8 @@ ENUMX BFD_RELOC_ARC_S25W_PCREL_PLT ENUMX BFD_RELOC_ARC_S21H_PCREL_PLT +ENUMX + BFD_RELOC_ARC_NPS_CMEM16 ENUMDOC ARC relocs. @@ -6773,6 +6786,10 @@ ENUMDOC important as several tables in the AArch64 bfd backend are indexed by these enumerators; make sure they are all synced. ENUM + BFD_RELOC_AARCH64_NULL +ENUMDOC + Deprecated AArch64 null relocation code. +ENUM BFD_RELOC_AARCH64_NONE ENUMDOC AArch64 null relocation code. @@ -7939,6 +7956,7 @@ bfd_generic_get_relocated_section_contents (bfd *abfd, if (reloc_count > 0) { arelent **parent; + for (parent = reloc_vector; *parent != NULL; parent++) { char *error_message = NULL; @@ -7946,6 +7964,16 @@ bfd_generic_get_relocated_section_contents (bfd *abfd, bfd_reloc_status_type r; symbol = *(*parent)->sym_ptr_ptr; + /* PR ld/19628: A specially crafted input file + can result in a NULL symbol pointer here. */ + if (symbol == NULL) + { + link_info->callbacks->einfo + (_("%X%P: %B(%A): error: relocation for offset %V has no value\n"), + abfd, input_section, (* parent)->address); + goto error_return; + } + if (symbol->section && discarded_section (symbol->section)) { bfd_byte *p; @@ -7983,26 +8011,22 @@ bfd_generic_get_relocated_section_contents (bfd *abfd, switch (r) { case bfd_reloc_undefined: - if (!((*link_info->callbacks->undefined_symbol) - (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), - input_bfd, input_section, (*parent)->address, - TRUE))) - goto error_return; + (*link_info->callbacks->undefined_symbol) + (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + input_bfd, input_section, (*parent)->address, TRUE); break; case bfd_reloc_dangerous: BFD_ASSERT (error_message != NULL); - if (!((*link_info->callbacks->reloc_dangerous) - (link_info, error_message, input_bfd, input_section, - (*parent)->address))) - goto error_return; + (*link_info->callbacks->reloc_dangerous) + (link_info, error_message, + input_bfd, input_section, (*parent)->address); break; case bfd_reloc_overflow: - if (!((*link_info->callbacks->reloc_overflow) - (link_info, NULL, - bfd_asymbol_name (*(*parent)->sym_ptr_ptr), - (*parent)->howto->name, (*parent)->addend, - input_bfd, input_section, (*parent)->address))) - goto error_return; + (*link_info->callbacks->reloc_overflow) + (link_info, NULL, + bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + (*parent)->howto->name, (*parent)->addend, + input_bfd, input_section, (*parent)->address); break; case bfd_reloc_outofrange: /* PR ld/13730: diff --git a/bfd/reloc16.c b/bfd/reloc16.c index bae0fb0..39e95f2 100644 --- a/bfd/reloc16.c +++ b/bfd/reloc16.c @@ -80,11 +80,9 @@ bfd_coff_reloc16_get_value (arelent *reloc, value = 0; else { - if (!((*link_info->callbacks->undefined_symbol) - (link_info, bfd_asymbol_name (symbol), - input_section->owner, input_section, reloc->address, - TRUE))) - abort (); + (*link_info->callbacks->undefined_symbol) + (link_info, bfd_asymbol_name (symbol), + input_section->owner, input_section, reloc->address, TRUE); value = 0; } } diff --git a/bfd/section.c b/bfd/section.c index 85dc141..70cb267 100644 --- a/bfd/section.c +++ b/bfd/section.c @@ -361,8 +361,8 @@ CODE_FRAGMENT . when memory read flag isn't set. *} .#define SEC_COFF_NOREAD 0x40000000 . -. {* Indicate that section has the no read flag set. *} -.#define SEC_ELF_NOREAD 0x80000000 +. {* Indicate that section has the purecode flag set. *} +.#define SEC_ELF_PURECODE 0x80000000 . . {* End of section flags. *} . @@ -430,7 +430,7 @@ CODE_FRAGMENT . information. *} . bfd_vma lma; . -. {* The size of the section in octets, as it will be output. +. {* The size of the section in *octets*, as it will be output. . Contains a value even if the section has no contents (e.g., the . size of <<.bss>>). *} . bfd_size_type size; diff --git a/bfd/simple.c b/bfd/simple.c index f05cc6e..7755af7 100644 --- a/bfd/simple.c +++ b/bfd/simple.c @@ -24,7 +24,7 @@ #include "libbfd.h" #include "bfdlink.h" -static bfd_boolean +static void simple_dummy_warning (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, const char *warning ATTRIBUTE_UNUSED, const char *symbol ATTRIBUTE_UNUSED, @@ -32,10 +32,9 @@ simple_dummy_warning (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, asection *section ATTRIBUTE_UNUSED, bfd_vma address ATTRIBUTE_UNUSED) { - return TRUE; } -static bfd_boolean +static void simple_dummy_undefined_symbol (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, const char *name ATTRIBUTE_UNUSED, bfd *abfd ATTRIBUTE_UNUSED, @@ -43,10 +42,9 @@ simple_dummy_undefined_symbol (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, bfd_vma address ATTRIBUTE_UNUSED, bfd_boolean fatal ATTRIBUTE_UNUSED) { - return TRUE; } -static bfd_boolean +static void simple_dummy_reloc_overflow (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, struct bfd_link_hash_entry *entry ATTRIBUTE_UNUSED, const char *name ATTRIBUTE_UNUSED, @@ -56,37 +54,33 @@ simple_dummy_reloc_overflow (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, asection *section ATTRIBUTE_UNUSED, bfd_vma address ATTRIBUTE_UNUSED) { - return TRUE; } -static bfd_boolean +static void simple_dummy_reloc_dangerous (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, const char *message ATTRIBUTE_UNUSED, bfd *abfd ATTRIBUTE_UNUSED, asection *section ATTRIBUTE_UNUSED, bfd_vma address ATTRIBUTE_UNUSED) { - return TRUE; } -static bfd_boolean +static void simple_dummy_unattached_reloc (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, const char *name ATTRIBUTE_UNUSED, bfd *abfd ATTRIBUTE_UNUSED, asection *section ATTRIBUTE_UNUSED, bfd_vma address ATTRIBUTE_UNUSED) { - return TRUE; } -static bfd_boolean +static void simple_dummy_multiple_definition (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED, bfd *nbfd ATTRIBUTE_UNUSED, asection *nsec ATTRIBUTE_UNUSED, bfd_vma nval ATTRIBUTE_UNUSED) { - return TRUE; } static void diff --git a/bfd/som.c b/bfd/som.c index 1e2c0c6..635727c 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -24,7 +24,7 @@ #include "sysdep.h" #include "alloca-conf.h" #include "bfd.h" - +#include "libiberty.h" #include "libbfd.h" #include "som.h" #include "safe-ctype.h" @@ -3304,11 +3304,12 @@ som_write_space_strings (bfd *abfd, /* Chunk of memory that we can use as buffer space, then throw away. */ size_t tmp_space_size = SOM_TMP_BUFSIZE; - char *tmp_space = alloca (tmp_space_size); + char *tmp_space = xmalloc (tmp_space_size); char *p = tmp_space; unsigned int strings_size = 0; asection *section; bfd_size_type amt; + bfd_size_type res; /* Seek to the start of the space strings in preparation for writing them out. */ @@ -3355,7 +3356,7 @@ som_write_space_strings (bfd *abfd, tmp_space_size = length + 5; else tmp_space_size = 2 * tmp_space_size; - tmp_space = alloca (tmp_space_size); + tmp_space = xrealloc (tmp_space, tmp_space_size); } /* Reset to beginning of the (possibly new) buffer space. */ @@ -3391,7 +3392,9 @@ som_write_space_strings (bfd *abfd, /* Done with the space/subspace strings. Write out any information contained in a partial block. */ amt = p - tmp_space; - if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt) + res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd); + free (tmp_space); + if (res != amt) return FALSE; *string_sizep = strings_size; return TRUE; @@ -3408,15 +3411,14 @@ som_write_symbol_strings (bfd *abfd, struct som_compilation_unit *compilation_unit) { unsigned int i; - /* Chunk of memory that we can use as buffer space, then throw away. */ size_t tmp_space_size = SOM_TMP_BUFSIZE; - char *tmp_space = alloca (tmp_space_size); + char *tmp_space = xmalloc (tmp_space_size); char *p = tmp_space; - unsigned int strings_size = 0; bfd_size_type amt; + bfd_size_type res; /* This gets a bit gruesome because of the compilation unit. The strings within the compilation unit are part of the symbol @@ -3475,7 +3477,7 @@ som_write_symbol_strings (bfd *abfd, tmp_space_size = 5 + length; else tmp_space_size = 2 * tmp_space_size; - tmp_space = alloca (tmp_space_size); + tmp_space = xrealloc (tmp_space, tmp_space_size); } /* Reset to beginning of the (possibly new) buffer @@ -3530,7 +3532,7 @@ som_write_symbol_strings (bfd *abfd, tmp_space_size = 5 + length; else tmp_space_size = 2 * tmp_space_size; - tmp_space = alloca (tmp_space_size); + tmp_space = xrealloc (tmp_space, tmp_space_size); } /* Reset to beginning of the (possibly new) buffer space. */ @@ -3563,7 +3565,9 @@ som_write_symbol_strings (bfd *abfd, /* Scribble out any partial block. */ amt = p - tmp_space; - if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt) + res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd); + free (tmp_space); + if (res != amt) return FALSE; *string_sizep = strings_size; @@ -6754,6 +6758,7 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec) #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 #define som_find_inliner_info _bfd_nosymbols_find_inliner_info +#define som_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target hppa_som_vec = { diff --git a/bfd/srec.c b/bfd/srec.c index 02b8dad..5fdd68b 100644 --- a/bfd/srec.c +++ b/bfd/srec.c @@ -1275,10 +1275,10 @@ srec_print_symbol (bfd *abfd, #define srec_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define srec_bfd_link_add_symbols _bfd_generic_link_add_symbols #define srec_bfd_link_just_syms _bfd_generic_link_just_syms -#define srec_bfd_copy_link_hash_symbol_type \ - _bfd_generic_copy_link_hash_symbol_type +#define srec_bfd_copy_link_hash_symbol_type _bfd_generic_copy_link_hash_symbol_type #define srec_bfd_final_link _bfd_generic_final_link #define srec_bfd_link_split_section _bfd_generic_link_split_section +#define srec_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target srec_vec = { diff --git a/bfd/stab-syms.c b/bfd/stab-syms.c index bcbf5f2..8d23818 100644 --- a/bfd/stab-syms.c +++ b/bfd/stab-syms.c @@ -45,8 +45,7 @@ __define_name (N_WARNING, "WARNING") const char * -bfd_get_stab_name (code) - int code; +bfd_get_stab_name (int code) { switch (code) { diff --git a/bfd/syms.c b/bfd/syms.c index 0a5ded7..5a22c0b 100644 --- a/bfd/syms.c +++ b/bfd/syms.c @@ -219,8 +219,7 @@ CODE_FRAGMENT .#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. *} @@ -232,7 +231,9 @@ CODE_FRAGMENT . . {* Used by the linker. *} .#define BSF_KEEP (1 << 5) -.#define BSF_KEEP_G (1 << 6) +. +. {* An ELF common symbol. *} +.#define BSF_ELF_COMMON (1 << 6) . . {* A weak global symbol, overridable without warnings by . a regular global symbol of the same name. *} @@ -1082,11 +1083,13 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, return FALSE; } - val = bfd_get_32 (abfd, info->stabs + r->address); + val = bfd_get_32 (abfd, info->stabs + + r->address * bfd_octets_per_byte (abfd)); val &= r->howto->src_mask; sym = *r->sym_ptr_ptr; val += sym->value + sym->section->vma + r->addend; - bfd_put_32 (abfd, (bfd_vma) val, info->stabs + r->address); + bfd_put_32 (abfd, (bfd_vma) val, info->stabs + + r->address * bfd_octets_per_byte (abfd)); } } diff --git a/bfd/targets.c b/bfd/targets.c index 50f3712..19d442a 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -452,6 +452,7 @@ BFD_JUMP_TABLE macros. . NAME##_bfd_copy_link_hash_symbol_type, \ . NAME##_bfd_final_link, \ . NAME##_bfd_link_split_section, \ +. NAME##_bfd_link_check_relocs, \ . NAME##_bfd_gc_sections, \ . NAME##_bfd_lookup_section_flags, \ . NAME##_bfd_merge_sections, \ @@ -493,6 +494,9 @@ BFD_JUMP_TABLE macros. . {* Should this section be split up into smaller pieces during linking. *} . bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); . +. {* Check the relocations in the bfd for validity. *} +. bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *); +. . {* Remove sections that are not referenced from the output. *} . bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); . @@ -1811,29 +1815,28 @@ bfd_target_list (void) /* FUNCTION - bfd_seach_for_target + bfd_iterate_over_targets SYNOPSIS - const bfd_target *bfd_search_for_target - (int (*search_func) (const bfd_target *, void *), - void *); + const bfd_target *bfd_iterate_over_targets + (int (*func) (const bfd_target *, void *), + void *data); DESCRIPTION - Return a pointer to the first transfer vector in the list of - transfer vectors maintained by BFD that produces a non-zero - result when passed to the function @var{search_func}. The - parameter @var{data} is passed, unexamined, to the search - function. + Call @var{func} for each target in the list of BFD target + vectors, passing @var{data} to @var{func}. Stop iterating if + @var{func} returns a non-zero result, and return that target + vector. Return NULL if @var{func} always returns zero. */ const bfd_target * -bfd_search_for_target (int (*search_func) (const bfd_target *, void *), - void *data) +bfd_iterate_over_targets (int (*func) (const bfd_target *, void *), + void *data) { - const bfd_target * const *target; + const bfd_target *const *target; - for (target = bfd_target_vector; *target != NULL; target ++) - if (search_func (*target, data)) + for (target = bfd_target_vector; *target != NULL; ++target) + if (func (*target, data)) return *target; return NULL; diff --git a/bfd/tekhex.c b/bfd/tekhex.c index 7de2f24..b94f843 100644 --- a/bfd/tekhex.c +++ b/bfd/tekhex.c @@ -980,11 +980,11 @@ tekhex_print_symbol (bfd *abfd, #define tekhex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define tekhex_bfd_link_add_symbols _bfd_generic_link_add_symbols #define tekhex_bfd_link_just_syms _bfd_generic_link_just_syms -#define tekhex_bfd_copy_link_hash_symbol_type \ - _bfd_generic_copy_link_hash_symbol_type +#define tekhex_bfd_copy_link_hash_symbol_type _bfd_generic_copy_link_hash_symbol_type #define tekhex_bfd_final_link _bfd_generic_final_link #define tekhex_bfd_link_split_section _bfd_generic_link_split_section #define tekhex_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define tekhex_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target tekhex_vec = { diff --git a/bfd/versados.c b/bfd/versados.c index c8b3c48..ed46e3b 100644 --- a/bfd/versados.c +++ b/bfd/versados.c @@ -873,6 +873,7 @@ versados_canonicalize_reloc (bfd *abfd, _bfd_generic_copy_link_hash_symbol_type #define versados_bfd_final_link _bfd_generic_final_link #define versados_bfd_link_split_section _bfd_generic_link_split_section +#define versados_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target m68k_versados_vec = { diff --git a/bfd/version.h b/bfd/version.h index 256d9cb..18ae282 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -1,4 +1,4 @@ -#define BFD_VERSION_DATE 20160601 +#define BFD_VERSION_DATE 20161007 #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/version.m4 b/bfd/version.m4 index 3442882..dd45601 100644 --- a/bfd/version.m4 +++ b/bfd/version.m4 @@ -1 +1 @@ -m4_define([BFD_VERSION], [2.26.51]) +m4_define([BFD_VERSION], [2.27.51]) diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c index d55780e..b00ab2a 100644 --- a/bfd/vms-alpha.c +++ b/bfd/vms-alpha.c @@ -1641,9 +1641,8 @@ _bfd_vms_get_value (bfd *abfd, const unsigned char *ascic, *vma = 0; else { - if (!(*info->callbacks->undefined_symbol) - (info, name, abfd, PRIV (image_section), PRIV (image_offset), TRUE)) - abort (); + (*info->callbacks->undefined_symbol) + (info, name, abfd, PRIV (image_section), PRIV (image_offset), TRUE); *vma = 0; } } @@ -8202,7 +8201,7 @@ alpha_vms_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) to include it. We don't need to check anything. */ if (!(*info->callbacks ->add_archive_element) (info, element, h->root.string, &element)) - return FALSE; + continue; if (!alpha_vms_link_add_object_symbols (element, info)) return FALSE; @@ -9260,6 +9259,7 @@ bfd_vms_get_data (bfd *abfd) _bfd_nodynamic_get_dynamic_reloc_upper_bound #define alpha_vms_canonicalize_dynamic_reloc \ _bfd_nodynamic_canonicalize_dynamic_reloc +#define alpha_vms_bfd_link_check_relocs _bfd_generic_link_check_relocs const bfd_target alpha_vms_vec = { diff --git a/bfd/warning.m4 b/bfd/warning.m4 index abd1a17..4c5b55d 100644 --- a/bfd/warning.m4 +++ b/bfd/warning.m4 @@ -21,9 +21,19 @@ AC_DEFUN([AM_BINUTILS_WARNINGS],[ # Set the 'development' global. . $srcdir/../bfd/development.sh +# Default set of GCC warnings to enable. GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + +# Add -Wshadow if the compiler is a sufficiently recent version of GCC. AC_EGREP_CPP([^[0-3]$],[__GNUC__],,GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wshadow") +# Add -Wstack-usage if the compiler is a sufficiently recent version of GCC. +AC_EGREP_CPP([^[0-4]$],[__GNUC__],,GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wstack-usage=262144") + +# Set WARN_WRITE_STRINGS if the compiler supports -Wwrite-strings. +WARN_WRITE_STRINGS="" +AC_EGREP_CPP([^[0-3]$],[__GNUC__],,WARN_WRITE_STRINGS="-Wwrite-strings") + AC_ARG_ENABLE(werror, [ --enable-werror treat compile warnings as errors], [case "${enableval}" in @@ -77,4 +87,5 @@ fi AC_SUBST(WARN_CFLAGS) AC_SUBST(NO_WERROR) + AC_SUBST(WARN_WRITE_STRINGS) ]) diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index f6030f1..d3653e3 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -997,7 +997,7 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info) return FALSE; n->next = NULL; - if (abfd->my_archive == NULL) + if (abfd->my_archive == NULL || bfd_is_thin_archive (abfd->my_archive)) { if (!bfd_xcoff_split_import_path (abfd, abfd->filename, &n->path, &n->file)) @@ -1992,9 +1992,10 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) sure the XCOFF linker is wholly prepared to handle them, and that would only be a warning, not an error. */ - if (! ((*info->callbacks->multiple_definition) - (info, &(*sym_hash)->root, NULL, NULL, (bfd_vma) 0))) - goto error_return; + (*info->callbacks->multiple_definition) (info, + &(*sym_hash)->root, + NULL, NULL, + (bfd_vma) 0); /* Try not to give this error too many times. */ (*sym_hash)->flags &= ~XCOFF_MULTIPLY_DEFINED; } @@ -2291,7 +2292,7 @@ xcoff_link_check_dynamic_ar_symbols (bfd *abfd, { if (!(*info->callbacks ->add_archive_element) (info, abfd, name, subsbfd)) - return FALSE; + continue; *pneeded = TRUE; return TRUE; } @@ -2363,7 +2364,7 @@ xcoff_link_check_ar_symbols (bfd *abfd, { if (!(*info->callbacks ->add_archive_element) (info, abfd, name, subsbfd)) - return FALSE; + continue; *pneeded = TRUE; return TRUE; } @@ -3117,11 +3118,8 @@ bfd_xcoff_import_symbol (bfd *output_bfd, if (h->root.type == bfd_link_hash_defined && (! bfd_is_abs_section (h->root.u.def.section) || h->root.u.def.value != val)) - { - if (! ((*info->callbacks->multiple_definition) - (info, &h->root, output_bfd, bfd_abs_section_ptr, val))) - return FALSE; - } + (*info->callbacks->multiple_definition) (info, &h->root, output_bfd, + bfd_abs_section_ptr, val); h->root.type = bfd_link_hash_defined; h->root.u.def.section = bfd_abs_section_ptr; @@ -4942,10 +4940,9 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo, if (name == NULL) return FALSE; - if (!(*flinfo->info->callbacks->unattached_reloc) - (flinfo->info, name, input_bfd, o, - irel->r_vaddr)) - return FALSE; + (*flinfo->info->callbacks->unattached_reloc) + (flinfo->info, name, + input_bfd, o, irel->r_vaddr); } } } @@ -5712,9 +5709,8 @@ xcoff_reloc_link_order (bfd *output_bfd, FALSE, FALSE, TRUE)); if (h == NULL) { - if (! ((*flinfo->info->callbacks->unattached_reloc) - (flinfo->info, link_order->u.reloc.p->u.name, NULL, NULL, (bfd_vma) 0))) - return FALSE; + (*flinfo->info->callbacks->unattached_reloc) + (flinfo->info, link_order->u.reloc.p->u.name, NULL, NULL, (bfd_vma) 0); return TRUE; } @@ -5752,13 +5748,9 @@ xcoff_reloc_link_order (bfd *output_bfd, case bfd_reloc_outofrange: abort (); case bfd_reloc_overflow: - if (! ((*flinfo->info->callbacks->reloc_overflow) - (flinfo->info, NULL, link_order->u.reloc.p->u.name, - howto->name, addend, NULL, NULL, (bfd_vma) 0))) - { - free (buf); - return FALSE; - } + (*flinfo->info->callbacks->reloc_overflow) + (flinfo->info, NULL, link_order->u.reloc.p->u.name, + howto->name, addend, NULL, NULL, (bfd_vma) 0); break; } ok = bfd_set_section_contents (output_bfd, output_section, (void *) buf, @@ -6282,10 +6274,9 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) { if ((*rel_hash)->indx < 0) { - if (! ((*info->callbacks->unattached_reloc) - (info, (*rel_hash)->root.root.string, - NULL, o, irel->r_vaddr))) - goto error_return; + (*info->callbacks->unattached_reloc) + (info, (*rel_hash)->root.root.string, + NULL, o, irel->r_vaddr); (*rel_hash)->indx = 0; } irel->r_symndx = (*rel_hash)->indx; @@ -6298,10 +6289,9 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) { if (toc_rel_hash->h->u.toc_indx < 0) { - if (! ((*info->callbacks->unattached_reloc) - (info, toc_rel_hash->h->root.root.string, - NULL, o, toc_rel_hash->rel->r_vaddr))) - goto error_return; + (*info->callbacks->unattached_reloc) + (info, toc_rel_hash->h->root.root.string, + NULL, o, toc_rel_hash->rel->r_vaddr); toc_rel_hash->h->u.toc_indx = 0; } toc_rel_hash->rel->r_symndx = toc_rel_hash->h->u.toc_indx; diff --git a/bfd/xsym.c b/bfd/xsym.c index d10f175..62cc02e 100644 --- a/bfd/xsym.c +++ b/bfd/xsym.c @@ -59,6 +59,7 @@ #define bfd_sym_bfd_final_link _bfd_generic_final_link #define bfd_sym_bfd_link_split_section _bfd_generic_link_split_section #define bfd_sym_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define bfd_sym_bfd_link_check_relocs _bfd_generic_link_check_relocs extern const bfd_target sym_vec; @@ -1804,7 +1805,7 @@ bfd_sym_print_type_information_table_entry (bfd *abfd, fprintf (f, "\n "); - buf = alloca (entry->physical_size); + buf = malloc (entry->physical_size); if (buf == NULL) { fprintf (f, "[ERROR]\n"); @@ -1813,11 +1814,13 @@ bfd_sym_print_type_information_table_entry (bfd *abfd, if (bfd_seek (abfd, entry->offset, SEEK_SET) < 0) { fprintf (f, "[ERROR]\n"); + free (buf); return; } if (bfd_bread (buf, entry->physical_size, abfd) != entry->physical_size) { fprintf (f, "[ERROR]\n"); + free (buf); return; } @@ -1837,6 +1840,7 @@ bfd_sym_print_type_information_table_entry (bfd *abfd, if (offset != entry->physical_size) fprintf (f, "\n [parser used %lu bytes instead of %lu]", offset, entry->physical_size); + free (buf); } void diff --git a/config.guess b/config.guess index 802e5f1..deaf2c4 100755 --- a/config.guess +++ b/config.guess @@ -2,7 +2,7 @@ # Attempt to guess a canonical system name. # Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2016-01-11' +timestamp='2016-05-27' # 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 @@ -237,6 +237,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -268,42 +272,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 @@ -376,16 +380,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build - SUN_ARCH="i386" + 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 [ "$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) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` @@ -410,7 +414,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} @@ -635,13 +639,13 @@ EOF sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi @@ -680,11 +684,11 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -697,12 +701,12 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} @@ -807,14 +811,14 @@ EOF echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -896,7 +900,7 @@ EOF exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix @@ -919,7 +923,7 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) @@ -1272,6 +1276,9 @@ EOF SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; @@ -1285,9 +1292,9 @@ EOF UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in @@ -1309,7 +1316,7 @@ EOF exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi @@ -1340,7 +1347,7 @@ EOF # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" @@ -1382,7 +1389,7 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos diff --git a/config.sub b/config.sub index fae826a..2377e13 100755 --- a/config.sub +++ b/config.sub @@ -2,7 +2,7 @@ # Configuration validation subroutine script. # Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2016-01-11' +timestamp='2016-05-23' # 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 @@ -520,7 +520,7 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; - asmjs) + asmjs) basic_machine=asmjs-unknown ;; aux) @@ -1382,7 +1382,7 @@ case $os in | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ @@ -1399,7 +1399,7 @@ case $os in | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos*) + | -onefs* | -tirtos* | -phoenix*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1531,6 +1531,8 @@ case $os in ;; -nacl*) ;; + -ios) + ;; -none) ;; *) diff --git a/config/isl.m4 b/config/isl.m4 index 86ccb94..92524af 100644 --- a/config/isl.m4 +++ b/config/isl.m4 @@ -106,7 +106,7 @@ AC_DEFUN([ISL_CHECK_VERSION], LDFLAGS="${_isl_saved_LDFLAGS} ${isllibs} ${gmplibs}" LIBS="${_isl_saved_LIBS} -lisl -lgmp" - AC_MSG_CHECKING([for isl 0.15 (or deprecated 0.14)]) + AC_MSG_CHECKING([for isl 0.16, 0.15, or deprecated 0.14]) AC_TRY_LINK([#include ], [isl_ctx_get_max_operations (isl_ctx_alloc ());], [gcc_cv_isl=yes], @@ -114,7 +114,19 @@ AC_DEFUN([ISL_CHECK_VERSION], AC_MSG_RESULT([$gcc_cv_isl]) if test "${gcc_cv_isl}" = no ; then - AC_MSG_RESULT([recommended isl version is 0.15, minimum required isl version 0.14 is deprecated]) + AC_MSG_RESULT([recommended isl version is 0.16 or 0.15, the minimum required isl version 0.14 is deprecated]) + fi + + AC_MSG_CHECKING([for isl 0.16 or 0.15]) + AC_TRY_LINK([#include ], + [isl_options_set_schedule_serialize_sccs (NULL, 0);], + [ac_has_isl_options_set_schedule_serialize_sccs=yes], + [ac_has_isl_options_set_schedule_serialize_sccs=no]) + AC_MSG_RESULT($ac_has_isl_options_set_schedule_serialize_sccs) + + if test x"$ac_has_isl_options_set_schedule_serialize_sccs" = x"yes"; then + islver="0.15" + AC_SUBST([islver]) fi CFLAGS=$_isl_saved_CFLAGS diff --git a/configure b/configure index 19eb2a4..a5f4fc5 100755 --- a/configure +++ b/configure @@ -650,6 +650,7 @@ extra_linker_plugin_flags extra_linker_plugin_configure_flags islinc isllibs +islver poststage1_ldflags poststage1_libs stage1_ldflags @@ -2972,7 +2973,7 @@ case "${ENABLE_GOLD}" in # Check for target supported by gold. case "${target}" in i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \ - | aarch64*-*-* | tilegx*-*-*) + | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*) configdirs="$configdirs gold" if test x${ENABLE_GOLD} = xdefault; then default_ld=gold @@ -3936,9 +3937,6 @@ case "${target}" in mips*-*-*) noconfigdirs="$noconfigdirs gprof" ;; - nds32*-*-*) - noconfigdirs="$noconfigdirs gdb" - ;; nvptx*-*-*) noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" ;; @@ -3961,9 +3959,12 @@ case "${target}" in tic6x-*-*) noconfigdirs="$noconfigdirs sim" ;; - tilepro*-*-* | tilegx*-*-*) + tilegx*-*-*) noconfigdirs="$noconfigdirs sim" ;; + tilepro*-*-*) + noconfigdirs="$noconfigdirs gdb sim" + ;; v810-*-*) noconfigdirs="$noconfigdirs bfd binutils gas gdb ld opcodes target-libgloss" ;; @@ -6020,8 +6021,8 @@ $as_echo "$as_me: WARNING: using in-tree isl, disabling version check" >&2;} LDFLAGS="${_isl_saved_LDFLAGS} ${isllibs} ${gmplibs}" LIBS="${_isl_saved_LIBS} -lisl -lgmp" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isl 0.15 (or deprecated 0.14)" >&5 -$as_echo_n "checking for isl 0.15 (or deprecated 0.14)... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isl 0.16, 0.15, or deprecated 0.14" >&5 +$as_echo_n "checking for isl 0.16, 0.15, or deprecated 0.14... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -6044,8 +6045,36 @@ rm -f core conftest.err conftest.$ac_objext \ $as_echo "$gcc_cv_isl" >&6; } if test "${gcc_cv_isl}" = no ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: recommended isl version is 0.15, minimum required isl version 0.14 is deprecated" >&5 -$as_echo "recommended isl version is 0.15, minimum required isl version 0.14 is deprecated" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: recommended isl version is 0.16 or 0.15, the minimum required isl version 0.14 is deprecated" >&5 +$as_echo "recommended isl version is 0.16 or 0.15, the minimum required isl version 0.14 is deprecated" >&6; } + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isl 0.16 or 0.15" >&5 +$as_echo_n "checking for isl 0.16 or 0.15... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +isl_options_set_schedule_serialize_sccs (NULL, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_has_isl_options_set_schedule_serialize_sccs=yes +else + ac_has_isl_options_set_schedule_serialize_sccs=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_has_isl_options_set_schedule_serialize_sccs" >&5 +$as_echo "$ac_has_isl_options_set_schedule_serialize_sccs" >&6; } + + if test x"$ac_has_isl_options_set_schedule_serialize_sccs" = x"yes"; then + islver="0.15" + fi CFLAGS=$_isl_saved_CFLAGS @@ -6127,7 +6156,7 @@ if test $target_elf = yes; then : else if test x"$default_enable_lto" = x"yes" ; then case $target in - *-apple-darwin9* | *-cygwin* | *-mingw*) ;; + *-apple-darwin9* | *-cygwin* | *-mingw* | *djgpp*) ;; # On other non-ELF platforms, LTO has yet to be validated. *) enable_lto=no ;; esac @@ -6138,7 +6167,7 @@ else # warn during gcc/ subconfigure; unless you're bootstrapping with # -flto it won't be needed until after installation anyway. case $target in - *-cygwin* | *-mingw* | *-apple-darwin*) ;; + *-cygwin* | *-mingw* | *-apple-darwin* | *djgpp*) ;; *) if test x"$enable_lto" = x"yes"; then as_fn_error "LTO support is not enabled for this target." "$LINENO" 5 fi diff --git a/configure.ac b/configure.ac index 6795709..e0610f0 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, -# 2014, 2015 Free Software Foundation, Inc. +# 2014, 2015, 2016 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 @@ -351,7 +351,7 @@ case "${ENABLE_GOLD}" in # Check for target supported by gold. case "${target}" in i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \ - | aarch64*-*-* | tilegx*-*-*) + | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*) configdirs="$configdirs gold" if test x${ENABLE_GOLD} = xdefault; then default_ld=gold @@ -1273,9 +1273,6 @@ case "${target}" in mips*-*-*) noconfigdirs="$noconfigdirs gprof" ;; - nds32*-*-*) - noconfigdirs="$noconfigdirs gdb" - ;; nvptx*-*-*) noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" ;; @@ -1298,9 +1295,12 @@ case "${target}" in tic6x-*-*) noconfigdirs="$noconfigdirs sim" ;; - tilepro*-*-* | tilegx*-*-*) + tilegx*-*-*) noconfigdirs="$noconfigdirs sim" ;; + tilepro*-*-*) + noconfigdirs="$noconfigdirs gdb sim" + ;; v810-*-*) noconfigdirs="$noconfigdirs bfd binutils gas gdb ld opcodes target-libgloss" ;; @@ -1817,7 +1817,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always. build_lto_plugin=yes ],[if test x"$default_enable_lto" = x"yes" ; then case $target in - *-apple-darwin9* | *-cygwin* | *-mingw*) ;; + *-apple-darwin9* | *-cygwin* | *-mingw* | *djgpp*) ;; # On other non-ELF platforms, LTO has yet to be validated. *) enable_lto=no ;; esac @@ -1828,7 +1828,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always. # warn during gcc/ subconfigure; unless you're bootstrapping with # -flto it won't be needed until after installation anyway. case $target in - *-cygwin* | *-mingw* | *-apple-darwin*) ;; + *-cygwin* | *-mingw* | *-apple-darwin* | *djgpp*) ;; *) if test x"$enable_lto" = x"yes"; then AC_MSG_ERROR([LTO support is not enabled for this target.]) fi diff --git a/cpu/ChangeLog b/cpu/ChangeLog index 3d39b91..e62e29f 100644 --- a/cpu/ChangeLog +++ b/cpu/ChangeLog @@ -1,3 +1,12 @@ +2016-03-03 Alan Modra + + * fr30.cpu (f-m4): Replace bogus comment with a better guess + at what is really going on. + +2016-03-02 Alan Modra + + * fr30.cpu (f-m4): Replace -1 << 4 with -16. + 2016-02-02 Andrew Burgess * epiphany.opc (epiphany_print_insn): Set info->bytes_per_line to diff --git a/cpu/fr30.cpu b/cpu/fr30.cpu index 6c8e8ce..84c32cf 100644 --- a/cpu/fr30.cpu +++ b/cpu/fr30.cpu @@ -159,11 +159,13 @@ (dnf f-u4c "4 bit 0 extended" () 12 4) (df f-i4 "4 bit sign extended" () 8 4 INT #f #f) (df f-m4 "4 bit minus extended" () 8 4 UINT + ; ??? This field takes a value in the range [-16,-1] but there + ; doesn't seem a way to tell CGEN that. Use an unsigned field and + ; disable range checks on insertion by masking. Restore the sign + ; on extraction. CGEN generated documentation for insns that use + ; this field will be wrong. ((value pc) (and WI value (const #xf))) - ; ??? On a 64 bit host this doesn't get completely sign extended - ; if the value is recorded in a long, as it is during extraction. - ; Various fixes exist, pick one. - ((value pc) (or WI value (sll WI (const -1) (const 4)))) + ((value pc) (or WI value (const -16))) ) (dnf f-u8 "8 bit unsigned" () 8 8) (dnf f-i8 "8 bit unsigned" () 4 8) diff --git a/djunpack.bat b/djunpack.bat index cff6cd1..f842bd7 100644 --- a/djunpack.bat +++ b/djunpack.bat @@ -17,8 +17,8 @@ Rem Rem The following 2 lines need to be changed with each new GDB release, to Rem be identical to the name of the top-level directory where the GDB Rem distribution unpacks itself. -set GDBVER=$package-7.11.1 -if "%GDBVER%"=="$package-7.11.1" GoTo EnvOk +set GDBVER=$package-7.12 +if "%GDBVER%"=="$package-7.12" GoTo EnvOk Rem If their environment space is too small, re-exec with a larger one command.com /e:4096 /c %0 %1 GoTo End diff --git a/etc/ChangeLog b/etc/ChangeLog index 516e6a9..1864bf0 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,13 @@ +2016-06-13 Nick Clifton + + * texi2pod.pl: Escape curly braces, whilst searching for keyword + strong. + +2016-03-18 Nick Clifton + + * texi2pod.pl: Add TARGET to the list of recognised man page + sections. + 2014-06-27 Ludovic Courtès PR external/16327 diff --git a/etc/texi2pod.pl b/etc/texi2pod.pl index cd0ffd9..0f465b7 100644 --- a/etc/texi2pod.pl +++ b/etc/texi2pod.pl @@ -311,7 +311,7 @@ while(<$inf>) { @columns = (); for $column (split (/\s*\@tab\s*/, $1)) { # @strong{...} is used a @headitem work-alike - $column =~ s/^\@strong{(.*)}$/$1/; + $column =~ s/^\@strong\{(.*)\}$/$1/; push @columns, $column; } $_ = "\n=item ".join (" : ", @columns)."\n"; @@ -340,7 +340,7 @@ die "No filename or title\n" unless defined $fn && defined $tl; $sects{NAME} = "$fn \- $tl\n"; $sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES}; -for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT FILES +for $sect (qw(NAME SYNOPSIS TARGET DESCRIPTION OPTIONS ENVIRONMENT FILES BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) { if(exists $sects{$sect}) { $head = $sect; diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6082ebb..1fc5823 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,20 +1,2301 @@ +2016-10-07 Joel Brobecker + + * version.in: Set GDB version number to 7.12. + +2016-10-06 Simon Marchi + + * frame.h: Forward-declare struct ui_out. + +2016-10-06 Maciej W. Rozycki + + * mips-tdep.c (mips_pseudo_register_type): Make FCRs always + 32-bit. + +2016-10-06 Maciej W. Rozycki + + * mips-tdep.c (mips_pseudo_register_type): Rearrange comments + throughout. + +2016-10-06 Markus Metzger + + * stack.c (frame_info): Call val_print_not_saved instead of + val_print_unavailable if frame_id check fails. + +2016-10-06 Pedro Alves + + * jit.c (free_objfile_data): Delete the JIT breakpoint and clear + the cached code address. + +2016-10-03 Simon Marchi + + * infrun.c (restore_current_uiout_cleanup): Move to ui-out.c. + (print_stop_event): Use make_cleanup_restore_current_uiout. + * python/python.c (execute_gdb_command): Likewise. + * ui-out.c (restore_current_uiout_cleanup): Move from infrun.c. + (make_cleanup_restore_current_uiout): New function definition. + * ui-out.h (make_cleanup_restore_current_uiout): New function + declaration. + * utils.c (do_restore_ui_out): Remove. + (make_cleanup_restore_ui_out): Remove. + * utils.h (make_cleanup_restore_ui_out): Remove. + +2016-10-03 Antoine Tremblay +2016-10-03 Simon Marchi + + PR gdb/20487 + * NEWS: Mention new frame field of =thread-selected event. + * cli/cli-decode.c (add_cmd): Initialize c->suppress_notification. + (add_com_suppress_notification): New function definition. + (cmd_func): Set and restore the suppress_notification flag. + * cli/cli-deicode.h (struct cmd_list_element) + : New field. + * cli/cli-interp.c (cli_suppress_notification): New global variable. + (cli_on_user_selected_context_changed): New function. + (_initialize_cli_interp): Attach to user_selected_context_changed + observer. + * command.h (struct cli_suppress_notification): New structure. + (cli_suppress_notification): New global variable declaration. + (add_com_suppress_notification): New function declaration. + * defs.h (enum user_selected_what_flag): New enum. + (user_selected_what): New enum flag type. + * frame.h (print_stack_frame_to_uiout): New function declaration. + * gdbthread.h (print_selected_thread_frame): New function declaration. + * inferior.c (print_selected_inferior): New function definition. + (inferior_command): Remove printing of inferior/thread/frame switch + notifications, notify user_selected_context_changed observer. + * inferior.h (print_selected_inferior): New function declaration. + * mi/mi-cmds.c (struct mi_cmd): Add user_selected_context + suppression to stack-select-frame and thread-select commands. + * mi/mi-interp.c (struct mi_suppress_notification) + : Initialize. + (mi_user_selected_context_changed): New function definition. + (_initialize_mi_interp): Attach to user_selected_context_changed. + * mi/mi-main.c (mi_cmd_thread_select): Print thread selection reply. + (mi_execute_command): Handle notification suppression. Notify + user_selected_context_changed observer on thread change instead of printing + event directly. Don't send it if command already sends the notification. + (command_notifies_uscc_observer): New function. + (mi_cmd_execute): Don't handle notification suppression. + * mi/mi-main.h (struct mi_suppress_notification) + : New field. + * stack.c (print_stack_frame_to_uiout): New function definition. + (select_frame_command): Notify user_selected_context_changed + observer. + (frame_command): Call print_selected_thread_frame if there's no frame + change or notify user_selected_context_changed observer if there is. + (up_command): Notify user_selected_context_changed observer. + (down_command): Likewise. + (_initialize_stack): Suppress user_selected_context notification for + command select-frame. + * thread.c (thread_command): Notify + user_selected_context_changed if the thread has changed, print + thread info directly if it hasn't. + (do_captured_thread_select): Do not print thread switch event. + (print_selected_thread_frame): New function definition. + * tui/tui-interp.c (tui_on_user_selected_context_changed): + New function definition. + (_initialize_tui_interp): Attach to user_selected_context_changed + observer. + +2016-09-29 Jan Kratochvil + + PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression + * exec.c (exec_file_locate_attach): Add parameter defer_bp_reset. + Use it. + * gdbcore.h (exec_file_locate_attach): Add parameter defer_bp_reset. + * infcmd.c (setup_inferior): Update caller. + * remote.c (remote_add_inferior): Likewise. + +2016-09-28 Pedro Alves + + * infcall.c (run_inferior_call): Remove input from the event + loop while running the infcall. + +2016-09-27 Fredrik Hederstierna + + * arm-tdep.c (arm_m_addr_is_magic): New function. + (arm_addr_bits_remove): Call arm_m_addr_is_magic. + (arm_m_exception_unwind_sniffer): Likewise. + +2016-09-21 Yao Qi + + * aarch32-linux-nat.c (aarch32_gp_regcache_collect): Keep + bits 20 to 23. + +2016-09-20 Edjunior Barbosa Machado + + * rs6000-tdep.c (ppc_process_record_op31): Fix record of Store String + Word instructions. + +2016-09-06 Pedro Alves + + * top.c (wait_sync_command_done): Don't assume current_ui doesn't + change across events. Restore the current UI before returning. + (gdb_readline_wrapper): Restore the current UI before returning. + +2016-09-06 Pedro Alves + + * event-top.c (restore_ui_cleanup): Now static. + (make_cleanup_restore_current_ui): New function. + (switch_thru_all_uis_init): Use it. + * infcall.c (call_thread_fsm_should_stop): Use it. + * infrun.c (fetch_inferior_event): Use it. + * top.c (new_ui_command): Use it. + * top.h (restore_ui_cleanup): Delete declaration. + (make_cleanup_restore_current_ui): New declaration. + +2016-08-30 Andreas Arnez + + * thread.c (tp_array_compar): Insert missing parentheses. + +2016-08-26 Andreas Arnez + + * xtensa-tdep.h (XTENSA_GDBARCH_TDEP_INSTANTIATE): Replace + designated initializer list by plain initializer list, for C++ + compliance. + +2016-08-25 Adhemerval Zanella + + * aarch64-linux-nat.c (ps_get_thread_area): Remove const from + struct ps_prochandle. + * amd64-linux-nat.c (ps_get_thread_area): Likewise. + * arm-linux-nat.c (ps_get_thread_area): Likewise. + * gdb_proc_service.h (ps_get_thread_area): Likewise. + * i386-linux-nat.c (ps_get_thread_area): Likewise. + * m68klinux-nat.c (ps_get_thread_area): Likewise. + * mips-linux-nat.c (ps_get_thread_area): Likewise. + * nat/aarch64-linux.c (aarch64_ps_get_thread_area): Likewise. + * nat/aarch64-linux.h (aarch64_ps_get_thread_area): Likewise. + * xtensa-linux-nat.c (ps_get_thread_area): Likewise. + +2016-08-24 Simon Marchi + + * infcmd.c (set_inferior_io_terminal): Set inferior terminal to + NULL if terminal_name is an empty string. + (_initialize_infcmd): Make the argument of "set inferior-tty" + optional, mention it in the help doc. + +2016-08-23 Pedro Alves + + * amd64-tdep.c (amd64_relocate_instruction) : Handle return + addresses over 0x7fffffff. + +2016-08-23 Pedro Alves + + PR gdb/20494 + * inflow.c (our_terminal_info, initial_gdb_ttystate): Update + comments. + (enum gdb_has_a_terminal_flag_enum, gdb_has_a_terminal_flag): + Delete. + (set_initial_gdb_ttystate): Record our_terminal_info here too, + instead of ... + (gdb_has_a_terminal): ... here. Reimplement in terms of + initial_gdb_ttystate. Make static. + * terminal.h (gdb_has_a_terminal): Delete declaration. + (set_initial_gdb_ttystate): Add comment. + * top.c (show_interactive_mode): Use input_interactive_p instead + of gdb_has_a_terminal. + +2016-08-22 Pedro Alves + + PR gdb/20505 + * linux-tdep.c (linux_vsyscall_range_raw): For core inferiors, + find the vDSO's start address with AT_SYSINFO_EHDR too, and + determine the vDSO's size by finding the PT_LOAD segment that + matches AT_SYSINFO_EHDR. + +2016-08-19 Yao Qi + + * aarch64-tdep.c (aarch64_analyze_prologue): Handle register + based STP instruction. + +2016-08-19 Yao Qi + + * completer.c (linespec_location_completer): Make file_to_match + null-terminated. + +2016-08-18 Edjunior Barbosa Machado + + * rs6000-tdep.c (ppc_process_record_op31): Handle HTM instructions. + +2016-08-15 Matthew Wahab + + PR gdb/20457 + * gdb_proc_service.h: Add an include of gregset.h + [!HAVE_PROC_SERVICE_H]: Remove the include of gregset.h. + +2016-08-15 Yao Qi + + * location.c (explicit_location_lex_one): Compare the return + value of strncmp with zero. Don't check (*inp)[9]. Increment + *inp by 8. + +2016-08-11 Pedro Alves + + PR gdb/20413 + * nat/linux-ptrace.c: Include instead of + "gregset.h". + +2016-08-10 Pedro Alves + + PR gdb/19187 + * record-full.c (record_full_remove_breakpoint): Don't remove the + breakpoint from the record_full_breakpoints VEC if we're detaching + the breakpoint from a fork child. + +2016-08-10 Pedro Alves + + PR gdb/19187 + * break-catch-sig.c (signal_catchpoint_remove_location): Adjust + interface. + * break-catch-syscall.c (remove_catch_syscall): + * breakpoint.c (enum remove_bp_reason): Moved to breakpoint.h. + (remove_breakpoint_1): Pass 'reason' down. + (remove_catch_fork, remove_catch_vfork, remove_catch_solib) + (remove_catch_exec, remove_watchpoint, remove_masked_watchpoint) + (base_breakpoint_remove_location, bkpt_remove_location) + (bkpt_probe_remove_location, bkpt_probe_remove_location): Adjust + interface. + * breakpoint.h (enum remove_bp_reason): Moved here from + breakpoint.c. + (struct breakpoint_ops) : Add 'reason' parameter. + * corelow.c (core_remove_breakpoint): New function. + (init_core_ops): Install it as to_remove_breakpoint method. + * exec.c (exec_remove_breakpoint): New function. + (init_exec_ops): Install it as to_remove_breakpoint method. + * mem-break.c (memory_remove_breakpoint): Adjust interface. + * record-btrace.c (record_btrace_remove_breakpoint): Adjust + interface. + * record-full.c (record_full_remove_breakpoint) + (record_full_core_remove_breakpoint): Adjust interface. + * remote.c (remote_remove_breakpoint): Adjust interface. + * target-debug.h (target_debug_print_enum_remove_bp_reason): New + macro. + * target-delegates.c: Regenerate. + * target.c (target_remove_breakpoint): Add 'reason' parameter. + * target.h (struct target_ops) : Add + 'reason' parameter. + (target_remove_breakpoint, memory_remove_breakpoint): Add 'reason' + parameter. + +2016-08-10 Pedro Alves + + PR gdb/19187 + * breakpoint.c (insertion_state_t): Delete. + (enum remove_bp_reason): New. + (detach_breakpoints, remove_breakpoint_1, remove_breakpoint): + Adjust to use enum remove_bp_reason instead of insertion_state_t. + +2016-08-10 Pedro Alves + + PR gdb/19187 + * breakpoint.c (remove_breakpoint): Remove 'is' parameter and + always pass mark_uninserted to remove_breakpoint_1. + (insert_breakpoint_locations, remove_breakpoints) + (remove_breakpoints_pid, update_global_location_list): Update + callers. + +2016-08-10 Pedro Alves + + * common/signals-state-save-restore.c + (save_original_signals_state, restore_original_signals_state): + Wrap perror_with_name arguments with '()'. + +2016-08-09 Pedro Alves + + PR gdb/20418 + * event-top.c (ui_register_input_event_handler) + (ui_unregister_input_event_handler): New functions. + (async_enable_stdin): Register input in the event loop. + (async_disable_stdin): Unregister input from the event loop. + (gdb_setup_readline): Register input in the event loop. + * infrun.c (check_curr_ui_sync_execution_done): Register input in + the event loop. + * target.c (target_terminal_inferior): Don't unregister input from + the event loop. + (target_terminal_ours): Don't register input in the event loop. + * target.h (target_terminal_inferior) + (target_terminal_ours_for_output, target_terminal_ours): Update + comments. + * top.h (ui_register_input_event_handler) + (ui_unregister_input_event_handler): New declarations. + * utils.c (ui_unregister_input_event_handler_cleanup) + (prepare_to_handle_input): New functions. + (defaulted_query, prompt_for_continue): Use + prepare_to_handle_input. + +2016-08-09 Pedro Alves + + PR mi/20431 + * mi/mi-main.c (mi_execute_command): Enable input and set prompt + state to PROMPT_NEEDED. + +2016-08-09 Pedro Alves + + PR gdb/18653 + * Makefile.in (SFILES): Add + common/signals-state-save-restore.c. + (HFILES_NO_SRCDIR): Add common/signals-state-save-restore.h. + (COMMON_OBS): Add signals-state-save-restore.o. + (signals-state-save-restore.o): New rule. + * configure: Regenerate. + * fork-child.c: Include "signals-state-save-restore.h". + (fork_inferior): Call restore_original_signals_state. + * main.c: Include "signals-state-save-restore.h". + (captured_main): Call save_original_signals_state. + * common/common.m4: Add sigaction to AC_CHECK_FUNCS checks. + * common/signals-state-save-restore.c: New file. + * common/signals-state-save-restore.h: New file. + +2016-08-09 Pedro Alves + + * value.c (unpack_value_bitfield): Skip unpacking if the parent + has no contents buffer to begin with. + +2016-08-08 Pedro Alves + + * features/i386/amd64-avx-mpx-linux.c: Regenerate. + * features/i386/amd64-avx-mpx.c: Regenerate. + * features/i386/i386-avx-mpx-linux.c: Regenerate. + * features/i386/i386-avx-mpx.c: Regenerate. + +2016-08-05 Pedro Alves + + PR remote/20398 + * remote-fileio.c (remote_fileio_quit_handler): Check the quit + flag before calling quit. + +2016-08-05 Pedro Alves + + * NEWS: Mention that GDB and GDBserver build with a C++ compiler + by default. + +2016-08-05 Pedro Alves + + * build-with-cxx.m4: Change help string to be in terms of + --disable-build-with-cxx. + * configure: Regenerate. + +2016-08-04 Yao Qi + + * aarch64-linux-nat.c (tdesc_arm_with_vfpv3): Remove the + declaration. + (aarch64_linux_read_description): Remove code on getting + auxv and select target description on it. Select target + description by the result of NT_ARM_VFP ptrace request. + +2016-08-03 Tom Tromey + + PR python/18565: + * python/py-frame.c (frapy_function): Use find_frame_funname. + +2016-08-03 Tom Tromey + + * stack.c (find_frame_funname): Avoid any possible leak in case + cp_remove_params can throw. + +2016-08-03 Tom Tromey + + * NEWS: Mention new Python breakpoint events. + +2016-08-01 Joel Brobecker + + * version.in: Set GDB version number to 7.11.90.DATE-git. + +2016-08-01 Joel Brobecker + + GDB 7.11.90 released. + +2016-08-01 Joel Brobecker + + * version.in: Set GDB version number to 7.11.90. + +2016-08-01 Joel Brobecker + + * NEWS: Rename "since GDB 7.11" section into "in GDB 7.12" section. + +2016-08-01 Joel Brobecker + + GDB 7.12 branch created (41bfcd638a4e0e48b96ce4de2845372dea481322): + * version.in: Bump version to 7.11.90.DATE-git. + +2016-07-27 Alan Modra + + * amd64-darwin-tdep.c: Don't include libbfd.h. + * i386-darwin-tdep.c: Likewise. + * rs6000-nat.c: Likewise. + * rs6000-tdep.c: Likewise. + +2016-07-26 Tom Tromey + + * symtab.c (register_symbol_computed_impl): Update. + PR python/20190: + * value.h (symbol_read_needs): Declare. + (symbol_read_needs_frame): Add comment. + * symtab.h (struct symbol_computed_ops) : Update + comment. + : Rename. Change return type. + * findvar.c (symbol_read_needs): New function. + (symbol_read_needs_frame): Rewrite. + (default_read_var_value): Use symbol_read_needs. + * dwarf2loc.c (struct symbol_needs_baton): Rename. + : Renamed from needs_frame. Changed type. + (needs_frame_read_addr_from_reg, symbol_needs_get_reg_value) + (symbol_needs_read_mem, symbol_needs_frame_base) + (symbol_needs_frame_cfa, symbol_needs_tls_address) + (symbol_needs_dwarf_call): Rename. + (needs_dwarf_reg_entry_value): Update. + (symbol_needs_ctx_funcs, dwarf2_loc_desc_get_symbol_read_needs): + Rename and update. + (locexpr_get_symbol_read_needs, loclist_symbol_needs): Likewise. + (dwarf2_locexpr_funcs, dwarf2_loclist_funcs): Update. + * defs.h (enum symbol_needs_kind): New. + +2016-07-26 Pedro Alves + + * nat/linux-ptrace.c: Include "gregset.h". + (linux_ptrace_test_ret_to_nx): Use PTRACE_GETREGS instead of + PTRACE_PEEKUSER. + +2016-07-26 Pedro Alves + + * amd64-linux-nat.c (amd64_linux_siginfo_fixup): Rename 'native' + parameter to 'ptrace'. + * nat/amd64-linux-siginfo.c (GDB_SI_SIZE): New define. + (nat_uptr_t): New an unsigned long. + (nat_clock_t): Remove attribute __aligned__. + (struct nat_timeval): Delete. + (nat_siginfo_t): Remove attribute __aligned__. + (ptrace_siginfo_t): Define. + (compat_siginfo_from_siginfo, siginfo_from_compat_siginfo) + (compat_x32_siginfo_from_siginfo) + (siginfo_from_compat_x32_siginfo): Make 'from' parameter const. + Convert through a ptrace_siginfo_t instead of a nat_siginfo_t. + Remove casts. + (amd64_linux_siginfo_fixup_common): Rename 'native' parameter to + 'ptrace'. Remove static assertions. + (top level): New static assertions. + +2016-07-25 Simon Marchi + + * top.h (make_delete_ui_cleanup): New declaration. + * top.c (delete_ui_cleanup): New function. + (make_delete_ui_cleanup): New function. + (new_ui_command): Create restore_ui cleanup earlier, create a + delete_ui cleanup and discard it on success. + +2016-07-25 Pedro Alves + Jan Kratochvil + + * nat/linux-procfs.c (parse_proc_status_state): Handle lowercase + 't'. + +2016-07-25 Pedro Alves + + * nat/linux-procfs.c (enum proc_state): New enum. + (parse_proc_status_state): New function. + (linux_proc_pid_get_state): Replace output string buffer parameter + with an output proc_state parameter. Use parse_proc_status_state. + (linux_proc_pid_is_gone): Adjust to use proc_state values. + (linux_proc_pid_has_state): Change type of 'state' parameter; now + an enum proc_state. Adjust to linux_proc_pid_get_state interface + change. + (linux_proc_pid_is_stopped) + (linux_proc_pid_is_trace_stopped_nowarn) + (linux_proc_pid_is_zombie_maybe_warn): Adjust to + linux_proc_pid_get_state interface change. + +2016-07-25 Tim Wiederhake + + * MAINTAINERS (Write After Approval): Add Tim Wiederhake + +2016-07-25 Tim Wiederhake + + * NEWS: Resume btrace on reconnect. + * record-btrace.c: Added record-btrace.h include. + (record_btrace_open): Split into this and ... + (record_btrace_push_target): ... this. + (record_btrace_disconnect): New function. + (init_record_btrace_ops): Use record_btrace_disconnect. + * record-btrace.h: New file. + * remote.c: Added record-btrace.h include. + (remote_start_remote): Check recording status. + (remote_btrace_maybe_reopen): New function. + +2016-07-23 Gabriel Krisman Bertazi + + * xml-syscall.c (get_syscalls_by_group): New. + (get_syscall_group_names): New. + (struct syscall_group_desc): New structure to store group data. + (struct syscalls_info): Include field to store the group list. + (sysinfo_free_syscall_group_desc): New. + (free_syscalls_info): Free group list. + (syscall_group_create_syscall_group_desc): New. + (syscall_group_add_syscall): New. + (syscall_create_syscall_desc): Add syscall to its groups. + (syscall_start_syscall): Load group attribute. + (syscall_group_get_group_by_name): New. + (xml_list_syscalls_by_group): New. + (xml_list_of_groups): New. + * xml-syscall.h (get_syscalls_by_group): Export function + to retrieve a list of syscalls filtered by the group name. + (get_syscall_group_names): Export function to retrieve the list + of syscall groups. + * break-catch-syscall.c (catch_syscall_split_args): Verify if + argument is a syscall group and expand it to a list of syscalls + when creating catchpoints. + (catch_syscall_completer): Add word completion for system call + groups. + * configure.ac: Include dependency for xsltproc when building + in maintainer-mode. + * break-catch-syscall.c (_initialize_breakpoint): Update catch + syscall command documentation. + * NEWS: Include section about catching groups of syscalls. + * configure: Regenerate. + * data-directory/Makefile.in: Generate syscall xml when building + in maintainer mode. + * syscalls/gdb-syscalls.dtd: Include group attribute to the + syscall element. + * syscalls/apply-defaults.xsl: New. + * syscalls/linux-defaults.xml.in: New. + * syscalls/aarch64-linux.xml: Rename to aarch64-linux.xml.in. + * syscalls/amd64-linux.xml: Rename to amd64-linux.xml.in. + * syscalls/arm-linux.xml: Rename to arm-linux.xml.in. + * syscalls/bfin-linux.xml: Rename to bfin-linux.xml.in. + * syscalls/i386-linux.xml: Rename to i386-linux.xml.in. + * syscalls/mips-n32-linux.xml: Rename to mips-n32-linux.xml.in. + * syscalls/mips-n64-linux.xml: Rename to mips-n64-linux.xml.in. + * syscalls/mips-o32-linux.xml: Rename to mips-o32-linux.xml.in. + * syscalls/ppc-linux.xml: Rename to ppc-linux.xml.in. + * syscalls/ppc64-linux.xml: Rename to ppc64-linux.xml.in. + * syscalls/s390-linux.xml: Rename to s390-linux.xml.in. + * syscalls/s390x-linux.xml: Rename to s390x-linux.xml.in. + * syscalls/sparc-linux.xml: Rename to sparc-linux.xml.in. + * syscalls/sparc64-linux.xml: Rename to sparc64-linux.xml.in. + * syscalls/aarch64-linux.xml: Regenerate. + * syscalls/amd64-linux.xml: Regenerate. + * syscalls/arm-linux.xml: Regenerate. + * syscalls/i386-linux.xml: Regenerate. + * syscalls/mips-n32-linux.xml: Regenerate. + * syscalls/mips-n64-linux.xml: Regenerate. + * syscalls/mips-o32-linux.xml: Regenerate. + * syscalls/ppc-linux.xml: Regenerate. + * syscalls/ppc64-linux.xml: Regenerate. + * syscalls/s390-linux.xml: Regenerate. + * syscalls/s390x-linux.xml: Regenerate. + * syscalls/sparc-linux.xml: Regenerate. + * syscalls/sparc64-linux.xml: Regenerate. + +2016-07-23 Andrew Pinski + + * nat/aarch64-linux-hw-point.c + (aarch64_linux_get_debug_reg_capacity): Handle + ARMv8.1 and ARMv8.2 debug versions. + * nat/aarch64-linux-hw-point.h + (AARCH64_DEBUG_ARCH_V8_1): New define. + (AARCH64_DEBUG_ARCH_V8_2): New define. + +2016-06-30 Руслан Ижбулатов + + PR gdb/14529 + * windows-nat.c (signal_event_command): New command 'signal-event' + for W32 JIT debug support. + * NEWS: Add an entry about the new 'signal-event' command. + +2016-07-22 Tom Tromey + + PR rust/20162: + * dwarf2read.c (scan_partial_symbols) : + Call scan_partial_symbols for children when reading a Rust CU. + (dwarf2_physname): Ignore invalid DW_AT_linkage_name generated by + rustc. + (process_structure_scope) : Call + read_func_scope for Rust. + +2016-07-22 Yao Qi + + * ctf.c (ctf_traceframe_info): Call bt_ctf_get_uint64 rather than + bt_ctf_get_int64. + +2016-07-21 Tom Tromey + + * rust-lang.c (rust_tuple_struct_type_p): Return false for empty + structs. + * rust-exp.y (struct_expr_list): Allow empty elements. + +2016-07-21 Tom Tromey + + * configure: Rebuild. + * warning.m4 (AM_GDB_WARNINGS) : Add + -Wunused-but-set-parameter, -Wunused-but-set-variable. + +2016-07-21 Pedro Alves + + * go32-nat.c (go32_create_inferior): Add cast. + * ser-go32.c (dos_noop): Delete. + (dos_flush_output, dos_setparity, dos_drain_output): New + functions. + (dos_write): Add cast. + (dos_ops): Use dos_flush_output, dos_setparity and + dos_drain_output. + * top.c (do_chdir_cleanup): Add cast. + +2016-07-21 Pedro Alves + + * windows-nat.c (handle_exception): Remove "th". + +2016-07-21 Pedro Alves + + * varobj.c (varobj_value_get_print_value): Move "gdbarch" to block + scope that uses it. + +2016-07-20 John Baldwin + + * fbsd-nat.c (fbsd_enable_proc_events): Enable "PTRACE_VFORK" + events. + (fbsd_pending_vfork_done): Only define if "PTRACE_VFORK" is not + defined. + (fbsd_add_vfork_done): Likewise. + (fbsd_is_vfork_done_pending): Likewise. + (fbsd_next_vfork_done): Likewise. + (fbsd_resume): Only ignore pending vfork done events if + "PTRACE_VFORK" is not defined. + (fbsd_wait): Only look for pending vfork done events if + "PTRACE_VFORK" is not defined. + [PTRACE_VFORK]: Handle "PL_FLAG_VFORKED" and "PL_FLAG_VFORK_DONE" + events. + (fbsd_follow_fork): Only fake a vfork done event if "PTRACE_VFORK" + is not defined. + +2016-07-20 John Baldwin + + * fbsd-nat.c (fbsd_wait): Use "fbsd_enable_proc_events" on + new child processes. + +2016-07-20 John Baldwin + + * fbsd-nat.c (fbsd_enable_lwp_events): Remove function. + (fbsd_enable_proc_events): New function. + (fbsd_enable_follow_fork): Remove function. + (fbsd_post_startup_inferior): Use "fbsd_enable_proc_events". + (fbsd_post_attach): Likewise. + +2016-07-15 John Baldwin + + * common/signals.c (gdb_signal_from_host): Handle SIGLIBRT. + (do_gdb_signal_to_host): Likewise. + * infrun.c (_initialize_infrun): Pass GDB_SIGNAL_LIBRT through to + programs. + * proc-events.c (signal_table): Add entry for SIGLIBRT. + +2016-07-14 Tom Tromey + + * python/py-breakpoint.c (gdbpy_breakpoint_deleted): Add missing + newline. + +2016-07-14 Tom Tromey + + * mips-tdep.c (micromips_scan_prologue): Remove "frame_addr". + (mips_o32_push_dummy_call): Remove "stack_used_p". + * aarch64-tdep.c (aarch64_record_data_proc_imm): Remove + "insn_bit28". + * rust-lang.c (rust_print_type): Remove "len". + * rust-exp.y (super_name): Remove "current_len". + * python/py-framefilter.c (py_print_type): Remove "type". + * mdebugread.c (parse_partial_symbols): Remove + "past_first_source_file". + : Remove "valu", "first_so_symnum", "prev_textlow_not_set". + * m2-valprint.c (m2_print_unbounded_array): Remove + "content_type". + (m2_val_print): Remove "i". + * linespec.c (unexpected_linespec_error): Remove "cleanup". + * f-valprint.c (f_val_print): Remove "i". + * elfread.c (elf_symtab_read): Remove "offset". + * dwarf2-frame.c (dwarf2_fetch_cfa_info): Remove "addr_size". + * jit.c (jit_dealloc_cache): Remove "i" and "frame_arch". + +2016-07-14 Tom Tromey + + * arch-utils.c (default_skip_permanent_breakpoint): Remove + "bp_insn". + * disasm.c (do_assembly_only): Remove "num_displayed". + * dwarf2read.c (read_abbrev_offset): Remove "length". + (dwarf_decode_macro_bytes) : Remove + "constant". + * m32c-tdep.c (make_regs): Remove "r2hl", "r3hl", and "intbhl". + * microblaze-tdep.c (microblaze_frame_cache): Remove "func". + * tracefile.c (trace_save): Remove "status". + +2016-07-14 Tom Tromey + + * symfile.c (simple_overlay_update_1): Remove initialization + of "size", and commented-out code. + (simple_overlay_update): Likewise. + +2016-07-14 Tom Tromey + + * tui/tui-winsource.c (tui_show_source_line): Use getcurx. + * tui/tui-io.c (tui_puts): Use getcurx. + (tui_redisplay_readline): Likewise. + +2016-07-14 Tom Tromey + + * inflow.c (child_terminal_ours_1): Use ATTRIBUTE_UNUSED. + +2016-07-14 Tom Tromey + + * corefile.c (reopen_exec_file): Only examine st.st_mtime if stat + succeeded. + +2016-07-13 Tom Tromey + + PR python/15620, PR python/18620: + * python/py-evts.c (gdbpy_initialize_py_events): Call + add_new_registry for new events. + * python/py-events.h (events_object) : New fields. + * python/py-breakpoint.c (gdbpy_breakpoint_created): Emit the + breakpoint changed event. + (gdbpy_breakpoint_deleted): Emit the breakpoint deleted event. + (gdbpy_breakpoint_modified): New function. + (gdbpy_initialize_breakpoints): Attach to the breakpoint modified + observer. + +2016-07-13 Tom Tromey + + PR python/17698: + * NEWS: Update. + * python/py-breakpoint.c (bppy_get_pending): New function. + (breakpoint_object_getset): Add entry for "pending". + * breakpoint.h (pending_breakpoint_p): Declare. + * breakpoint.c (pending_breakpoint_p): New function. + +2016-07-13 Tom Tromey + + * python/py-breakpoint.c (bppy_get_visibility) + (gdbpy_breakpoint_created): Use user_breakpoint_p. + +2016-07-13 Tom Tromey + + PR cli/18053: + * jit.c (jit_reader_load_command): Use tilde_expand. + (_initialize_jit): Fix help for jit-reader-unload. Set completer + for new commands. + +2016-07-12 Tom Tromey + + PR python/19293: + * python/lib/gdb/command/unwinders.py (do_enable_unwinder): Call + gdb.invalidate_cached_frames. + * python/lib/gdb/unwinder.py (register_unwinder): Call + gdb.invalidate_cached_frames. + * python/python.c (gdbpy_invalidate_cached_frames): New function. + (python_GdbMethods): Add entry for invalidate_cached_frames. + +2016-07-07 Walfred Tedeschi + + * cp-namespace.c (cp_lookup_bare_symbol): Initialize + lang_this.symbol. + +2016-07-07 Walfred Tedeschi + + * cp-namespace.c (cp_lookup_bare_symbol): Use language passed as + parameter to look for the symbol "this". + + +2016-07-06 John Baldwin + + * h8300-tdep.c (h8300_print_register): Remove extraneous parentheses. + +2016-07-06 John Baldwin + + * ada-lang.c (ada_unpack_from_contents): Use unsigned constants with + left shifts. + +2016-07-06 John Baldwin + + * sh64-tdep.c (sh64_analyze_prologue): Set "uses_fp" when setting + the MEDIA_FP_REGNUM register. + +2016-07-06 John Baldwin + + * score-tdep.c (score7_malloc_and_get_memblock): Remove check for + negative size. + +2016-07-06 John Baldwin + + * fbsd-nat.c (fbsd_is_vfork_done_pending): Fix return type. + +2016-07-06 Yao Qi + + * arm-tdep.c (arm_vfp_cprc_sub_candidate): Don't call + arm_vfp_cprc_sub_candidate for static field. + +2016-07-06 Manish Goregaokar + + * rust-lang.c (rust_subscript): Allow subscripting pointers + +2016-07-05 Jan Kratochvil + + * configure: Regenerate. + * configure.ac (HAVE_LIBBABELTRACE): Fix pos variable dereference. + +2016-07-01 Don Breazeal + + * remote.c (remote_get_memory_xfer_limit): New function. + * target-delegates.c: Regenerate. + * target.c (memory_xfer_partial): Call + target_ops.to_get_memory_xfer_limit. + * target.h (struct target_ops) : New + member. + +2016-07-01 John Baldwin + + * fbsd-nat.c (struct fbsd_fork_child_info): Rename to ... + (struct fbsd_fork_info): ... this. + (struct fbsd_fork_info) : Rename to ... + (struct fbsd_fork_info) : ... this. + (fbsd_pending_children): Update type. + (fbsd_remember_child): Update type and field name. + (fbsd_is_child_pending): Likewise. + (fbsd_pending_vfork_done): New variable. + (fbsd_is_vfork_done_pending): New function. + (fbsd_next_vfork_done): New function. + (fbsd_resume): Don't resume processes with a pending vfork done + event. + (fbsd_wait): Report pending vfork done events. + (fbsd_follow_fork): Delay and record a pending vfork done event + for a vfork parent when detaching the child. + +2016-07-01 John Baldwin + + * fbsd-nat.c (super_resume): Move earlier next to "super_wait". + (resume_one_thread_cb): Move below fork following helper code. + (resume_all_threads_cb): Likewise. + (fbsd_resume): Likewise. + +2016-07-01 John Baldwin + + * fbsd-nat.c (fbsd_follow_fork): Only detach child if + "detach_fork" is true. + +2016-07-01 John Baldwin + + * x86bsd-nat.c: Include 'gdbthread.h'. + (x86bsd_dr_set): Set debug registers on all threads belonging to + the current inferior. + +2016-07-01 John Baldwin + + * Makefile.in [HFILES_NO_SRCDIR]: Replace 'amd64bsd-nat.h' with + 'x86bsd-nat.h'. + * amd64bsd-nat.c: Include 'x86bsd-nat.h' instead of + 'amd64bsd-nat.h'. + (amd64bsd_xsave_len): Rename and move to x86bsd-nat.c. + (amd64bsd_fetch_inferior_registers): Replace 'amd64bsd_xsave_len' + with 'x86bsd_xsave_len'. + (amd64bsd_store_inferior_registers): Likewise. + (amd64bsd_target): Inherit from x86bsd_target. + (amd64bsd_dr_get): Rename and move to x86bsd-nat.c. + (amd64bsd_dr_set): Likewise. + (amd64bsd_dr_set_control): Likewise. + (amd64bsd_dr_set_addr): Likewise. + (amd64bsd_dr_get_addr): Likewise. + (amd64bsd_dr_get_status): Likewise. + (amd64bsd_dr_get_control): Likewise. + * amd64fbsd-nat.c: Include 'x86bsd-nat.h' instead of + 'amd64bsd-nat.h'. + (super_mourn_inferior): Move to x86bsd-nat.c. + (amd64fbsd_mourn_inferior): Rename and move to x86bsd-nat.c. + (amd64fbsd_read_description): Replace 'amd64bsd_xsave_len' with + 'x86bsd_xsave_len'. + (_initialize_amd64fbsd_nat): Remove x86 watchpoint setup and + mourn_inferior' target op. + * config/i386/fbsd.mh (NATDEPFILES): Add x86bsd-nat.o. + * config/i386/fbsd64.mh: Likewise. + * config/i386/nbsd64.mh: Likewise. + * config/i386/nbsdelf.mh: Likewise. + * config/i386/obsd.mh: Likewise. + * config/i386/obsd64.mh: Likewise. + * i386bsd-nat.c: Include 'x86bsd-nat.h'. + (i386bsd_xsave_len): Rename and move to x86bsd-nat.c. + (i386bsd_fetch_inferior_registers): Replace 'i386bsd_xsave_len' + with 'x86bsd_xsave_len'. + (i386bsd_store_inferior_registers): Likewise. + (i386bsd_target): Inherit from x86bsd_target. + (i386bsd_dr_get): Rename and move to x86bsd-nat.c. + (i386bsd_dr_set): Likewise. + (i386bsd_dr_set_control): Likewise. + (i386bsd_dr_set_addr): Likewise. + (i386bsd_dr_get_addr): Likewise. + (i386bsd_dr_get_status): Likewise. + (i386bsd_dr_get_control): Likewise. + * i386bsd-nat.h (i386bsd_xsave_len): Remove. + (i386bsd_dr_set_control): Remove. + (i386bsd_dr_set_addr): Remove. + (i386bsd_dr_get_addr): Remove. + (i386bsd_dr_get_status): Remove. + (i386bsd_dr_get_control): Remove. + * i386fbsd-nat.c: Include 'x86bsd-nat.h'. + (i386fbsd_read_description): Replace 'i386bsd_xsave_len' with + 'x86bsd_xsave_len'. + (_initialize_i386fbsd_nat): Remove x86 watchpoint setup and + mourn_inferior' target op. + * x86bsd-nat.c: New file. + * x86bsd-nat.h: New file. + +2016-07-01 Pedro Alves + Tom Tromey + + * jit.c (jit_reader_load_command): Call reinit_frame_cache and + jit_inferior_created_hook. + (jit_reader_unload_command): Call reinit_frame_cache and + jit_inferior_exit_hook. + * jit.c (struct jit_unwind_private) : Delete field. + : New field. + (jit_unwind_reg_set_impl): Set the register's value in the + regcache. Free the passed-in gdb_reg_value. + (jit_dealloc_cache): Adjust to free the regcache. + (jit_frame_sniffer): Allocate a regcache instead of an array of + gdb_reg_value pointers. + (jit_frame_this_id): Adjust. + (jit_frame_prev_register): Read raw registers off of the regcache + instead of from the gdb_reg_value pointer array. Use + gdbarch_pseudo_register_read_value to read pseudo registers. + * regcache.c (regcache_raw_set_cached_value): New function, + factored out from ... + (regcache_raw_write): ... here. + * regcache.h (regcache_raw_set_cached_value): Declare. + +2016-07-01 Pedro Alves + Antoine Tremblay + + * inf-ptrace.c (inf_ptrace_detach_success): New function, factored + out from ... + (inf_ptrace_detach): ... here. + * inf-ptrace.h (inf_ptrace_detach_success): New declaration. + * linux-nat.c (get_pending_status): Rename to ... + (get_detach_signal): ... this, and return a host signal instead of + filling in a wait status. + (detach_one_lwp): New function, factored out from detach_callback + and adjusted to handle detaching from a zombie thread. + (detach_callback): Skip the leader thread. + (linux_nat_detach): No longer defer to inf_ptrace_detach to detach + the leader thread, nor build a signal string to pass down. + Instead, use target_announce_detach, detach_one_lwp and + inf_ptrace_detach_success. + +2016-07-01 Pedro Alves + + * breakpoint.c (breakpoint_init_inferior): Discard watchpoint + locations. + * infcmd.c (detach_command): Call breakpoint_init_inferior. + +2016-07-01 Pedro Alves + + * darwin-nat.c (darwin_detach): Use target_announce_detach. + * inf-ptrace.c (inf_ptrace_detach): Likewise. + * nto-procfs.c (procfs_detach): Likewise. + * remote.c (remote_detach_1): Likewise. + * target.c (target_announce_detach): New function. + * target.h (target_announce_detach): New declaration. + +2016-06-29 Tom Tromey + + PR python/20129: + * python/lib/gdb/command/frame_filters.py (_do_enable_frame_filter) + (SetFrameFilterPriority._set_filter_priority): Use "frame_filter", + not "name". + +2016-06-29 Tom Tromey + + PR gdb/17210: + * target.c (free_memory_read_result_vector): Take a pointer to the + VEC as an argument. + (read_memory_robust): Install a cleanup for "result". + * mi/mi-main.c (mi_cmd_data_read_memory_bytes): Update. + +2016-06-29 Manish Goregaokar + + * rust-lang.c (rust_get_disr_info): Initialize saveptr to NULL. + +2016-06-29 Manish Goregaokar + + * rust-lang.c (rust_get_disr_info): Use strtok_r instead of strsep. + +2016-06-28 Yao Qi + + * aarch64-tdep.c (aarch64_displaced_step_b): Use int64_t for + variable new_offset. + +2016-06-27 Manish Goregaokar + + * rust-lang.c (rust_print_type, rust_decorations): Print unit + types as "()". + (rust_print_type): Omit return type for functions returning unit. + +2016-06-25 Pierre-Marie de Rodat + + * python/py-breakpoint.c (bppy_init): Clear bppy_pending_object + when there is an error during the breakpoint creation. + +2016-06-25 Tom Tromey + + * rust-lang.c (rust_get_disr_info, rust_print_type): Fix + formatting. + +2016-06-25 Manish Goregaokar + + PR gdb/20239 + * rust-lang.c (rust_get_disr_info): Correctly interpret + NonZero-optimized enums of arbitrary depth. + (rust_print_type): Correctly print NonZero-optimized + enums. + +2016-06-24 David Taylor + + PR gdb/17520 Structure offset wrong when 1/4 GB or greater. + * c-lang.h: Change all parameters, variables, and struct or union + members used as struct or union fie3ld offsets from int to + LONGEST. + * c-valprint.c: Likewise. + * cp-abi.c: Likewise. + * cp-abi.h: Likewise. + * cp-valprint.c: Likewise. + * d-valprint.c: Likewise. + * dwarf2loc.c: Likewise. + * eval.c: Likewise. + * extension-priv.h: Likewise. + * extension.c: Likewise. + * extension.h: Likewise. + * findvar.c: Likewise. + * gdbtypes.h: Likewise. + * gnu-v2-abi.c: Likewise. + * gnu-v3-abi.c: Likewise. + * go-valprint.c: Likewise. + * guile/guile-internal.h: Likewise. + * guile/scm-pretty-print.c: Likewise. + * jv-valprint.c Likewise. + * opencl-lang.c: Likewise. + * p-lang.h: Likewise. + * python/py-prettyprint.c: Likewise. + * python/python-internal.h: Likewise. + * spu-tdep.c: Likewise. + * typeprint.c: Likewise. + * valarith.c: Likewise. + * valops.c: Likewise. + * valprint.c: Likewise. + * valprint.h: Likewise. + * value.c: Likewise. + * value.h: Likewise. + * p-valprint.c: Likewise. + * c-typeprint.c (c_type_print_base): When printing offset, use + plongest, not %d. + * gdbtypes.c (recursive_dump_type): Ditto. + +2016-06-24 David Taylor + + * MAINTAINERS (Write After Approval): Add David Taylor. + +2016-06-24 John Baldwin + + * configure.ac: Check for support for system call LWP fields on + FreeBSD. + * config.in, configure: Rebuild. + * data-directory/Makefile.in (SYSCALLS_FILES): Add freebsd.xml. + * fbsd-nat.c (fbsd_wait) [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE]: + Report system call events. + [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE] + (fbsd_set_syscall_catchpoint): New function. + (fbsd_nat_add_target) [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE]: + Set "to_set_syscall_catchpoint" to "fbsd_set_syscall_catchpoint". + * fbsd-tdep.c: Include xml-syscall.h + (fbsd_get_syscall_number): New function. + (fbsd_init_abi): Set XML system call file name. + Add "get_syscall_number" gdbarch method. + * syscalls/freebsd.xml: New file. + +2016-06-24 John Baldwin + + * fbsd-tdep.c: Include "auxv.h". + (fbsd_print_auxv_entry): New function. + (fbsd_init_abi): Install gdbarch "print_auxv_entry" method. + +2016-06-24 John Baldwin + + * auxv.c (fprint_auxv_entry): New function. + (default_print_auxv_entry): New function. + (fprint_target_auxv): Use gdbarch_print_auxv_entry. + * auxv.h (enum auxv_format): New enum. + (fprint_auxv_entry): Declare. + (default_print_auxv_entry): Declare. + * gdbarch.sh (print_auxv_entry): New. + * gdbarch.c, gdbarch.h: Re-generated. + +2016-06-24 John Baldwin + + * fbsd-nat.c [KERN_PROC_AUXV] New variable super_xfer_partial. + (fbsd_xfer_partial): New function. + (fbsd_nat_add_target) [KERN_PROC_AUXV] Set "to_xfer_partial" to + "fbsd_xfer_partial". + +2016-06-23 Tom Tromey + + * symtab.c (symbol_find_demangled_name): Loop over languages and + use language_sniff_from_mangled_name. + * rust-lang.c (rust_sniff_from_mangled_name): New function. + (rust_language_defn): Update. + * p-lang.c (pascal_language_defn): Update. + * opencl-lang.c (opencl_language_defn): Update. + * objc-lang.c (objc_sniff_from_mangled_name): New function. + (objc_language_defn): Update. + * m2-lang.c (m2_language_defn): Update. + * language.h (struct language_defn) : New + field. + (language_sniff_from_mangled_name): Declare. + * language.c (language_sniff_from_mangled_name): New function. + (unknown_language_defn, auto_language_defn, local_language_defn): + Update. + * jv-lang.c (java_sniff_from_mangled_name): New function. + (java_language_defn): Use it. + * go-lang.c (go_sniff_from_mangled_name): New function. + (go_language_defn): Use it. + * f-lang.c (f_language_defn): Update. + * defs.h (enum language): Reorder. + * d-lang.c (d_sniff_from_mangled_name): New function. + (d_language_defn): Use it. + * cp-support.h (gdb_sniff_from_mangled_name): Declare. + * cp-support.c (gdb_sniff_from_mangled_name): New function. + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Update. + * ada-lang.c (ada_sniff_from_mangled_name): New function. + (ada_language_defn): Use it. + +2016-06-23 Tom Tromey + + * ada-lang.c (ada_extensions): New array. + (ada_language_defn): Use it. + * c-lang.c (c_extensions): New array. + (c_language_defn): Use it. + (cplus_extensions): New array. + (cplus_language_defn): Use it. + (asm_extensions): New array. + (asm_language_defn): Use it. + (minimal_language_defn): Update. + * d-lang.c (d_extensions): New array. + (d_language_defn): Use it. + * f-lang.c (f_extensions): New array. + (f_language_defn): Use it. + * go-lang.c (go_language_defn): Update. + * jv-lang.c (java_extensions): New array. + (java_language_defn): Use it. + * language.c (add_language): Call add_filename_language. + (unknown_language_defn, auto_language_defn, local_language_defn): + Update. + * language.h (struct language_defn) : New + field. + * m2-lang.c (m2_language_defn): Update. + * objc-lang.c (objc_extensions): New array. + (objc_language_defn): Use it. + * opencl-lang.c (opencl_language_defn): Update. + * p-lang.c (p_extensions): New array. + (pascal_language_defn): Use it. + * rust-lang.c (rust_extensions): New array. + (rust_language_defn): Use it. + * symfile.c (add_filename_language): No longer static. Make "ext" + const. + (init_filename_language_table): Remove. + (_initialize_symfile): Update. + * symfile.h (add_filename_language): Declare. + +2016-06-23 Tom Tromey + + * symfile.c (filename_language_table): Now a VEC. + (fl_table_size, fl_table_next): Remove. + (add_filename_language): Use VEC_safe_push. + (set_ext_lang_command, info_ext_lang_command) + (deduce_language_from_filename): Use VEC_iterate. + (init_filename_language_table): Use VEC_empty. + +2016-06-23 Tom Tromey + + * python/python.c (gdbpy_parameter): Now static. + * python/python-internal.h (gdbpy_parameter): Don't declare. + +2016-06-23 Tom Tromey + + PR gdb/16483: + * python/lib/gdb/command/frame_filters.py + (InfoFrameFilter.list_frame_filters): Rename to print_list. Print + nothing if no filters found. Return value indicating whether + filters were printed. + (InfoFrameFilter.print_list): Remove. + (InfoFrameFilter.invoke): Print message if no frame filters + found. + +2016-06-21 Walfred Tedeschi + + * f-valprint.c (f_val_print): Add field names for printing + derived types fields. + +2016-06-21 Andreas Arnez + + * s390-linux-tdep.c (s390_iterate_over_regset_sections): Fix typo + in name of last-break regset. + +2016-06-21 Pedro Alves + + * fork-child.c (fork_inferior): Switch the child to the main UI + right after vfork. Save/restore the current UI in the parent. + Flush outputs of the main UI instead of the current UI. + +2016-06-21 Pedro Alves + + * breakpoint.c (watchpoint_check): Send watchpoint-deleted output + to all UIs. + +2016-06-21 Pedro Alves + + * NEWS: Mention support for running interpreters on separate + UIs and the new new-ui command. + +2016-06-21 Pedro Alves + + * interps.c (set_top_level_interpreter): New function, factored + out from captured_main. + (interpreter_completer): Make extern. + * interps.h (set_top_level_interpreter, interpreter_completer): + New declarations. + (captured_main): Use set_top_level_interpreter. + * top.c [!O_NOCTTY] (O_NOCTTY): Define as 0. + (open_terminal_stream, new_ui_command): New functions. + (init_main): Install the "new-ui" command. + +2016-06-21 Pedro Alves + + * cli/cli-script.c (read_next_line): Adjust to per-UI stdin. + (read_command_lines): Use input_interactive_p instead of + input_from_terminal_p. + * defs.h (struct ui): Forward declare. + (input_from_terminal_p): Rename to ... + (input_interactive_p): ... this. + * event-top.c (stdin_event_handler): Pass 0 as from_tty argument + to quit_command. + (command_handler): Adjust to per-UI stdin. + (handle_line_of_input): Adjust to per-UI stdin and use + input_interactive_p instead of ISATTY and input_from_terminal_p. + (gdb_readline_no_editing_callback): Adjust to per-UI stdin. + (command_line_handler): Always pass true as "from_tty" parameter + of handle_line_of_input and execute_command. + (async_sigterm_handler): Pass 0 as from_tty argument to + quit_command. + * inflow.c (interactive_mode, show_interactive_mode): Moved to ... + (gdb_has_a_terminal): Don't check interactive_mode here. + (_initialize_inflow): Don't install "set interactive-mode" here. + * main.c (captured_command_loop): Adjust to per-UI stdin. + * mi/mi-interp.c (mi_execute_command_wrapper): Adjust to per-UI + stdin. + * top.c (new_ui): Save the stdin stream and whether it's a tty. + (dont_repeat): Adjust to per-UI stdin. + (command_line_input): Adjust to per-UI stdin and to use + input_interactive_p. + (quit_force): Write history if any UI supports interactive input. + (interactive_mode, show_interactive_mode): Move here, from + inflow.c. + (input_from_terminal_p): Rename to ... + (input_interactive_p): ... this, and check the "interactive_mode" + global instead of calling gdb_has_a_terminal. + (_initialize_top): Install "set interactive-mode" here. + * top.h (struct ui) : New + fields. + * utils.c (quit): Pass 0 as from_tty argument to quit_force. + (defaulted_query): Adjust to per-UI stdin and to use + input_interactive_p. + +2016-06-21 Pedro Alves + + * event-top.c (stdin_event_handler): Don't quit gdb if it was a + secondary UI's input stream that closed. Instead, just delete the + UI. + +2016-06-21 Pedro Alves + + * event-top.c (main_ui_): Delete. + (main_ui, current_ui, ui_list): No longer initialize here. + * main.c (captured_main): UI initialization code factored out to + new new_ui function. + (gdb_main): Wrap captured_main with TRY/CATCH instead of + catch_errors. + * top.c (highest_ui_num): New global. + (new_ui): New function. + * top.h (struct ui) : New field. + (new_ui): New declaration. + +2016-06-21 Pedro Alves + + * cli/cli-interp.c (cli_on_normal_stop): Bail out early if there's + nothing to print. Use should_print_stop_to_console. + * tui/tui-interp.c (tui_on_normal_stop): Likewise. + +2016-06-21 Pedro Alves + + * breakpoint.c (new_until_break_fsm): Add 'cmd_interp' parameter. + (until_break_fsm_should_stop, until_break_fsm_clean_up): Add + thread parameter. + (until_break_command): Pass command interpreter to thread fsm + ctor. + * cli/cli-interp.c (should_print_stop_to_console): Adjust. + * gdbthread.h (struct thread_control_state) : + Delete field. + * infcall.c (new_call_thread_fsm): Add 'cmd_interp' parameter. + Pass it down. + (call_thread_fsm_should_stop): Add thread parameter. + (call_function_by_hand_dummy): Pass command interpreter to thread + fsm ctor. Pass thread pointer to fsm clean up method. + * infcmd.c: Include interps.h. + (struct step_command_fsm) : Delete field. + (new_step_command_fsm): Add 'cmd_interp' parameter. Pass it down. + (step_command_fsm_prepare): Remove references to fsm's thread + field. + (step_1): Pass command interpreter to thread + fsm ctor. Pass thread pointer to fsm clean up method. + (step_command_fsm_should_stop, step_command_fsm_clean_up): Add + thread parameter and use it. + (new_until_next_fsm): Add 'cmd_interp' parameter. Pass it down. + (until_next_fsm_should_stop, until_next_fsm_clean_up): Add thread + parameter and use it. + (until_next_command): Pass command interpreter to thread fsm ctor. + (struct finish_command_fsm) : Delete field. + (finish_command_fsm_ops): Add NULL slot for should_notify_stop. + (new_finish_command_fsm): Add 'cmd_interp' parameter and pass it + down. Remove thread parameter and adjust. + (finish_command_fsm_should_stop, finish_command_fsm_clean_up): Add + thread parameter and use it. + (finish_command): Pass command interpreter to thread fsm ctor. + Don't pass thread. + * infrun.c (follow_fork): Move thread fsm to child fork instead of + command interpreter, only. + (clear_proceed_status_thread): Remove reference to command_interp. + (proceed): Don't record the thread's command interpreter. + (clean_up_just_stopped_threads_fsms): Pass thread to fsm clean_up + method. + (fetch_inferior_event): Pass thread to fsm should_stop method. + * thread-fsm.c (thread_fsm_ctor): Add 'cmd_interp' parameter. + Store it. + (thread_fsm_clean_up, thread_fsm_should_stop): Add thread + parameter and pass it down. + * thread-fsm.h (struct thread_fsm) : New field. + (struct thread_fsm_ops) : Add thread + parameter. + (thread_fsm_ctor): Add 'cmd_interp' parameter. + (thread_fsm_clean_up, thread_fsm_should_stop): Add thread + parameter. + * thread.c (thread_cancel_execution_command): Pass thread to + thread fsm clean_up method. + +2016-06-21 Pedro Alves + + * cli/cli-interp.c: Include gdbthread.h and thread-fsm.h. + (should_print_stop_to_console): New function, factored out from + mi_on_normal_stop_1. + * cli/cli-interp.h (should_print_stop_to_console): Declare. + * mi/mi-interp.c (mi_on_normal_stop_1): Use + should_print_stop_to_console. Pass it the current UI's console + interpreter. + * mi/mi-main.c (captured_mi_execute_command): Use the + INTERP_CONSOLE symbol rather than explicit "console". + +2016-06-21 Pedro Alves + + * infcmd.c (prepare_execution_command): Use + all_uis_on_sync_execution_starting. + * infrun.c (all_uis_on_sync_execution_starting): New function. + * infrun.h (all_uis_on_sync_execution_starting): Declare. + +2016-06-21 Pedro Alves + + * annotate.c: Include top.h. + (async_background_execution_p): Delete. + (print_value_flags): Check the UI's prompt state rather then + async_background_execution_p. + * event-loop.c (start_event_loop): Set the prompt state to + PROMPT_NEEDED. + * event-top.c (display_gdb_prompt, async_enable_stdin) + (async_disable_stdin): Check the current UI's prompt state instead + of the sync_execution global. + (command_line_handler): Set the prompt state to PROMPT_NEEDED + before running a command, and display the prompt if still needed + afterwards. + * infcall.c (struct call_thread_fsm) : New field. + (new_call_thread_fsm): New parameter 'waiting_ui'. Store it. + (call_thread_fsm_should_stop): Set the prompt state to + PROMPT_NEEDED. + (run_inferior_call): Adjust to temporarily set the prompt state to + PROMPT_BLOCKED instead of using the sync_execution global. + (call_function_by_hand_dummy): Pass the current UI to + new_call_thread_fsm. + * infcmd.c: Include top.h. + (continue_1): Check the current UI's prompt state instead of the + sync_execution global. + (continue_command): Validate global execution state before calling + prepare_execution_command. + (step_1): Call all_uis_check_sync_execution_done. + (attach_post_wait): Don't call async_enable_stdin here. Remove + reference to sync_execution. + * infrun.c (sync_execution): Delete global. + (follow_fork_inferior) + (reinstall_readline_callback_handler_cleanup): Check the current + UI's prompt state instead of the sync_execution global. + (check_curr_ui_sync_execution_done) + (all_uis_check_sync_execution_done): New functions. + (fetch_inferior_event): Call all_uis_check_sync_execution_done + instead of trying to determine whether the global sync execution + changed. + (handle_no_resumed): Check the prompt state of all UIs. + (normal_stop): Emit the no unwait-for even to all PROMPT_BLOCKED + UIs. Emit the "Switching to" notification to all UIs. Enable + stdin in all UIs. + * infrun.h (sync_execution): Delete. + (all_uis_check_sync_execution_done): Declare. + * main.c (captured_command_loop): Don't call + interp_pre_command_loop if the prompt is blocked. + (catch_command_errors, catch_command_errors_const): Adjust. + (captured_main): Set the initial prompt state to PROMPT_NEEDED. + * mi/mi-interp.c (display_mi_prompt): Set the prompt state to + PROMPTED. + (mi_interpreter_resume): Don't clear sync_execution. Remove hack + comment. + (mi_execute_command_input_handler): Set the prompt state to + PROMPT_NEEDED before executing the command, and only display the + prompt if the prompt state is PROMPT_NEEDED afterwards. + (mi_on_resume_1): Adjust to check the prompt state. + * target.c (target_terminal_inferior): Adjust to check the prompt + state. + * top.c (wait_sync_command_done, maybe_wait_sync_command_done) + (execute_command): Check the current UI's prompt state instead of + sync_execution. + * top.h (enum prompt_state): New. + (struct ui) : New field. + (ALL_UIS): New macro. + +2016-06-21 Pedro Alves + + * top.c (gdb_secondary_prompt_depth): Delete. + (gdb_in_secondary_prompt_p): Add ui parameter. Use it. + (gdb_readline_wrapper_cleanup, gdb_readline_wrapper): Adjust to + per-UI gdb_secondary_prompt_depth. + * top.h (struct ui) : New field. + +2016-06-21 Pedro Alves + + * cli/cli-interp.c (cli_interpreter_pre_command_loop): New + function. + (cli_interp_procs): Install it instead of cli_command_loop. + * cli/cli-interp.h (cli_interpreter_pre_command_loop): Declare. + * event-top.c (cli_command_loop): Delete. + * interps.c (interp_new): Remove reference to command_loop_proc. + (current_interp_command_loop): Delete. + (interp_pre_command_loop): New function. + (interp_command_loop_ftype): Delete. + * interps.h (interp_pre_command_loop_ftype): New typedef. + (struct interp_procs) : Delele field. + : New field. + (current_interp_command_loop): Delete declaration. + (interp_pre_command_loop): New declaration. + * main.c (captured_command_loop): Call interp_pre_command_loop + instead of current_interp_command_loop and start an event loop. + * mi/mi-interp.c (mi_command_loop): Delete. + (mi_interpreter_pre_command_loop): New. + (mi_interp_procs): Update. + * tui/tui-interp.c (tui_interp_procs): Install + cli_interpreter_pre_command_loop instead of cli_command_loop. + +2016-06-21 Pedro Alves + + * interps.c (current_interpreter): New function. + * interps.h (current_interpreter): New declaration. + * mi/mi-cmds.h (raw_stdout): Delete declaration. + * mi/mi-common.h (struct mi_interp) : New field. + * mi/mi-interp.c (display_mi_prompt): New parameter 'mi'. Adjust + to per-UI raw_stdout. + (mi_interpreter_init): Adjust to per-UI raw_stdout. + (mi_on_sync_execution_done, mi_execute_command_input_handler) + (mi_command_loop): Pass MI instance to display_mi_prompt. + (mi_on_normal_stop_1, mi_output_running_pid, mi_on_resume_1) + (mi_on_resume): Adjust to per-UI raw_stdout. + (saved_raw_stdout): Delete. + (mi_set_logging): Adjust to per-UI raw_stdout and + saved_raw_stdout. + * mi/mi-main.c (raw_stdout): Delete. + (mi_cmd_gdb_exit, captured_mi_execute_command) + (mi_print_exception, mi_load_progress): Adjust to per-UI + raw_stdout. + (print_diff_now, mi_print_timing_maybe): New ui_file parameter. + Pass it along. + (print_diff): New ui_file parameter. Send output there instead of + raw_stdout. + * mi/mi-main.h (struct ui_file): Forward declare. + (mi_print_timing_maybe): Add ui_file parameter. + +2016-06-21 Pedro Alves + + * mi/mi-interp.c (display_mi_prompt): New function. + +2016-06-21 Pedro Alves + + * target.c (target_terminal_inferior): Bail out after + unregistering input_fd if not on the main UI. + (target_terminal_ours): Bail out after registering input_fd if not + on the main UI. + (target_terminal_ours_for_output): Bail out if not on the main UI. + +2016-06-21 Pedro Alves + + * event-top.c (restore_ui_cleanup): Make extern. + * infrun.c (fetch_inferior_event): Always switch to the main UI. + * top.h (restore_ui_cleanup): Declare. + +2016-06-21 Pedro Alves + + PR mi/20034 + * cli/cli-interp.c: Include cli-interp.h and event-top.h. + (cli_interpreter_resume): Pass 1 to gdb_setup_readline. Set the + UI's input_handler here. + (cli_interpreter_supports_command_editing): New function. + (cli_interp_procs): Install it. + * cli/cli-interp.h: New file. + * event-top.c (async_command_editing_p): Rename to ... + (set_editing_cmd_var): ... this. + (change_line_handler): Add parameter 'editing', and use it. Bail + early if the interpreter doesn't support editing. Don't touch + readline state if editing is off. + (gdb_rl_callback_handler_remove, gdb_rl_callback_handler_install) + (gdb_rl_callback_handler_reinstall): Assert the current UI is the + main UI. + (display_gdb_prompt): Don't call gdb_rl_callback_handler_remove if + not using readline. Check whether the current UI is using command + editing instead of checking the async_command_editing_p global. + (set_async_editing_command): Delete. + (gdb_setup_readline): Add 'editing' parameter. Only allow editing + on the main UI. Don't touch readline state if editing is off. + (gdb_disable_readline): Don't touch readline state if editing is + off. + * event-top.h (gdb_setup_readline): Add 'int' parameter. + (set_async_editing_command): Delete declaration. + (change_line_handler, command_line_handler): Declare. + (async_command_editing_p): Rename to ... + (set_editing_cmd_var): ... this. + * infrun.c (reinstall_readline_callback_handler_cleanup): Check + whether the current UI has editing enabled rather than checking + the async_command_editing_p global. + * interps.c (interp_supports_command_editing): New function. + * interps.h (interp_supports_command_editing_ftype): New typedef. + (struct interp_procs) : New field. + (interp_supports_command_editing): Declare. + * mi/mi-interp.c (mi_interpreter_resume): Pass 0 to + gdb_setup_readline. Don't clear the async_command_editing_p + global. Update comments. + * top.c (gdb_readline_wrapper_line, gdb_readline_wrapper): Check + whether the current UI has editing enabled rather than checking + the async_command_editing_p global. Don't touch readline state if + editing is off. + (undo_terminal_modifications_before_exit): Switch to the main UI. + Unconditionally call gdb_disable_readline. + (set_editing): New function. + (show_async_command_editing_p): Rename to ... + (show_editing): ... this. Show the state of the current UI. + (_initialize_top): Adjust. + * top.h (struct ui) : New field. + * tui/tui-interp.c: Include cli/cli-interp.h. + (tui_resume): Pass 1 to gdb_setup_readline. Set the UI's + input_handler. + (tui_interp_procs): Install + cli_interpreter_supports_command_editing. + * tui/tui-io.c (tui_getc): Check whether the current UI has + editing enabled rather than checking the async_command_editing_p + global. + +2016-06-21 Pedro Alves + + * top.c: Call gen_ret_current_ui_field_ptr for current_uiout. + * top.h (struct ui) : New field. + * ui-out.c (current_uiout): Delete. + * ui-out.h (current_uiout): Delete. + (current_ui_current_uiout_ptr): New declaration. + (current_uiout): Reimplement as wrapper around + current_ui_current_uiout_ptr. + +2016-06-21 Pedro Alves + + * ui-out.c (default_ui_out_impl): Delete. + (def_uiout): Delete. + (current_uiout): Set to NULL. + (default_table_begin, default_table_body, default_table_end) + (default_table_header, default_begin, default_end) + (default_field_int, default_field_skip, default_field_string) + (default_field_fmt, default_spaces, default_text, default_message) + (default_wrap_hint, default_flush, default_data_destroy): Delete. + +2016-06-21 Pedro Alves + + * event-top.c (gdb_setup_readline): Pass the UI's outstream and + errstream to stdout_fileopen and stderr_fileopen. + * exceptions.c: Include top.h. + (print_flush): Open the current UI's outstream file descriptor, + instead of hardcoding file descriptor 1. + * main.c (captured_main): Save the main UI's out and error + streams. Adjust stderr_fileopen call. + * top.h (struct ui) : New fields. + * ui-file.c (stderr_fileopen): Add stream parameter. Use it + instead of stderr. + * ui-file.h (stderr_fileopen): Add stream parameter and update + comment. + +2016-06-21 Pedro Alves + + * event-top.c (input_fd): Delete. + (stdin_event_handler): Switch to the UI whose input descriptor got + the event. Adjust to per-UI input_fd. + (gdb_setup_readline): Don't set the input_fd global. Adjust to + per-UI input_fd. + (gdb_disable_readline): Adjust to per-UI input_fd. + * event-top.h (input_fd): Delete declaration. + * linux-nat.c (linux_nat_terminal_inferior): Don't remove input_fd + from the event-loop here. + (linux_nat_terminal_ours): Don't register input_fd in the + event-loop here. + * main.c (captured_main): Adjust to per-UI input_fd. + * remote.c (remote_terminal_inferior): Don't remove input_fd from + the event-loop here. + (remote_terminal_ours): Don't register input_fd in the event-loop + here. + * target.c: Include top.h and event-top.h. + (target_terminal_inferior): Remove input_fd from the event-loop + here. + (target_terminal_ours): Register input_fd in the event-loop. + * top.h (struct ui) : New field. + +2016-06-21 Pedro Alves + + * cli/cli-script.c (execute_user_command, read_next_line) + (read_next_line): Adjust to per-UI instream. + * event-top.c (stdin_event_handler, command_handler) + (handle_line_of_input, command_line_handler) + (gdb_readline_no_editing_callback, async_sigterm_handler) + (gdb_setup_readline): Likewise. + * inflow.c: Include top.h. + (gdb_has_a_terminal, child_terminal_init_with_pgrp) + (gdb_save_tty_state, child_terminal_inferior) + (child_terminal_ours_1, copy_terminal_info): Use the main UI. + (initialize_stdin_serial): Adjust to per-UI instream. + * main.c (captured_command_loop, captured_main): Adjust to per-UI + instream. + * mi/mi-interp.c (mi_execute_command_wrapper): Likewise. + * python/python.c (python_interactive_command): Likewise. + * terminal.h (struct ui): Forward declare. + (initialize_stdin_serial): Add struct ui parameter. + * top.c (instream): Delete. + (do_restore_instream_cleanup, read_command_file, dont_repeat) + (gdb_readline_no_editing, command_line_input) + (input_from_terminal_p, gdb_init): Adjust to per-UI instream. + * top.h (struct ui) : New field. + (instream): Delete declaration. + (quit): Adjust to per-UI instream. + +2016-06-21 Pedro Alves + + * event-loop.c: Include top.h. + (invoke_async_signal_handlers): Switch to the main UI. + * event-top.c (main_ui_): Update comment. + (main_ui): New global. + * top.h (main_ui): Declare. + +2016-06-21 Pedro Alves + + * cli/cli-interp.c (cli_interp): Delete. + (as_cli_interp): New function. + (cli_on_normal_stop, cli_on_signal_received) + (cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited) + (cli_on_no_history): Send output to all CLI UIs. + (cli_on_sync_execution_done, cli_on_command_error): Skip output if + the top level interpreter is not a CLI. + (cli_interpreter_init): Don't set cli_interp or install observers + here. + (_initialize_cli_interp): Install observers here. + * event-top.c (main_ui_, ui_list): New globals. + (current_ui): Point to main_ui_. + (restore_ui_cleanup, switch_thru_all_uis_init) + (switch_thru_all_uis_cond, switch_thru_all_uis_next): New + functions. + * mi/mi-interp.c (as_mi_interp): New function. + (mi_interpreter_init): Don't install observers here. + (mi_on_sync_execution_done): Skip output if the top level + interpreter is not a MI. + (mi_new_thread, mi_thread_exit, mi_record_changed) + (mi_inferior_added, mi_inferior_appeared, mi_inferior_exit) + (mi_inferior_removed): Send output to all MI UIs. + (find_mi_interpreter, mi_interp_data): Delete. + (find_mi_interp): New function. + (mi_on_signal_received, mi_on_end_stepping_range) + (mi_on_signal_exited, mi_on_exited, mi_on_no_history): Send output + to all MI UIs. + (mi_on_normal_stop): Rename to ... + (mi_on_normal_stop_1): ... this. + (mi_on_normal_stop): Reimplement, sending output to all MI UIs. + (mi_traceframe_changed, mi_tsv_created, mi_tsv_deleted) + (mi_tsv_modified, mi_breakpoint_created, mi_breakpoint_deleted) + (mi_breakpoint_modified, mi_output_running_pid): Send output to + all MI UIs. + (mi_on_resume): Rename to ... + (mi_on_resume_1): ... this. Don't handle infcalls here. + (mi_on_resume): Reimplement, sending output to all MI UIs. + (mi_solib_loaded, mi_solib_unloaded, mi_command_param_changed) + (mi_memory_changed): Send output to all MI UIs. + (report_initial_inferior): Install observers here. + * top.h (struct ui) : New field. + (ui_list): Declare. + (struct switch_thru_all_uis): New. + (switch_thru_all_uis_init, switch_thru_all_uis_cond) + (switch_thru_all_uis_next): Declare. + (SWITCH_THRU_ALL_UIS): New macro. + * tui/tui-interp.c (tui_interp): Delete global. + (as_tui_interp): New function. + (tui_on_normal_stop, tui_on_signal_received) + (tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited) + (tui_on_no_history): Send output to all TUI UIs. + (tui_on_sync_execution_done, tui_on_command_error): Skip output if + the top level interpreter is not a TUI. + (tui_init): Don't set tui_interp or install observers here. + (_initialize_tui_interp): Install observers here. + +2016-06-21 Pedro Alves + + * cli/cli-interp.c (cli_uiout): Delete, moved into ... + (struct cli_interp): ... this new structure. + (cli_on_normal_stop, cli_on_signal_received) + (cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited) + (cli_on_no_history): Use interp_ui_out. + (cli_interpreter_init): If top level, set the cli_interp global. + (cli_interpreter_init): Return the interp's data instead of NULL. + (cli_interpreter_resume, cli_interpreter_exec, cli_ui_out): Adjust + to cli_uiout being in the interpreter's data. + (cli_interp_procs): New, factored out from _initialize_cli_interp. + (cli_interp_factory): New function. + (_initialize_cli_interp): Call interp_factory_register. + * interps.c (get_interp_info): New, factored out from ... + (get_current_interp_info): ... this. + (interp_new): Add parameter 'data'. Store it. + (struct interp_factory): New function. + (interp_factory_p): New typedef. Define a VEC_P. + (interpreter_factories): New global. + (interp_factory_register): New function. + (interp_add): Add 'ui' parameter. Use get_interp_info and + interp_lookup_existing. + (interp_lookup): Rename to ... + (interp_lookup_existing): ... this. Add 'ui' parameter. Don't + check for NULL or empty name here. + (interp_lookup): Add 'ui' parameter and reimplement. + (interp_set_temp, interpreter_exec_cmd): Adjust. + (interpreter_completer): Complete on registered interpreter + factories instead of interpreters. + * interps.h (interp_factory_func): New typedef. + (interp_factory_register): Declare. + (interp_new, interp_add): Adjust. + (interp_lookup): Declare. + * main.c (captured_main): Adjust. + * mi/mi-interp.c (mi_cmd_interpreter_exec): Adjust. + (mi_interp_procs): New, factored out from + _initialize_mi_interp. + (mi_interp_factory): New function. + * python/python.c (execute_gdb_command): Adjust. + * tui/tui-interp.c (tui_init): If top level, set the tui_interp + global. + (tui_interp_procs): New. + (tui_interp_factory): New function. + (_initialize_tui_interp): Call interp_factory_register. + +2016-06-21 Pedro Alves + + * breakpoint.c (bpstat_do_actions_1): Access the current UI's + async field instead of the interpreter_async global. + * cli/cli-script.c (execute_user_command, while_command) + (if_command, script_from_file): Likewise. + * compile/compile.c: Include top.h instead of interps.h. + (compile_file_command, compile_code_command) + (compile_print_command): Access the current UI's async field + instead of the interpreter_async global. + * guile/guile.c: Include top.h instead of interps.h. + (guile_repl_command, guile_command, gdbscm_execute_gdb_command): + Access the current UI's async field instead of the + interpreter_async global. + * guile/scm-ports.c: Include top.h instead of interps.h. + (ioscm_with_output_to_port_worker): Access the current UI's async + field instead of the interpreter_async global. + * inf-loop.c (inferior_event_handler): Likewise. + * infcall.c (run_inferior_call): Likewise. + * infrun.c (reinstall_readline_callback_handler_cleanup) + (fetch_inferior_event): Likewise. + * interps.c (interpreter_async): Delete. + (struct ui_interp_info): New. + (get_current_interp_info): New function. + (interp_list, current_interpreter, top_level_interpreter_ptr): + Delete. + (interp_add, interp_set, interp_lookup, interp_ui_out) + (current_interp_set_logging, interp_set_temp) + (current_interp_named_p): Adjust to per-UI interpreters. + (command_interpreter): Delete. + (command_interp, current_interp_command_loop, interp_quiet_p) + (interp_exec, interpreter_exec_cmd, interpreter_completer) + (top_level_interpreter, top_level_interpreter_data): Adjust to + per-UI interpreters. + * interps.h (interpreter_async): Delete. + * main.c (captured_command_loop): Access the current UI's async + field instead of the interpreter_async global. + * python/python.c (python_interactive_command, python_command) + (execute_gdb_command): Likewise. + * top.c (maybe_wait_sync_command_done, execute_command_to_string): + Access the current UI's async field instead of the + interpreter_async global. + * top.h (struct tl_interp_info): Forward declare. + (struct ui) : New fields. + +2016-06-21 Pedro Alves + + * main.c (gdb_stdout, gdb_stderr, gdb_stdlog, gdb_stdin): Delete + globals. + (gen_ret_current_ui_field_ptr): New macro. Use it to generate + wrappers for gdb_stdout, gdb_stderr, gdb_stdlog and gdb_stdin. + * top.h (struct ui) : New fields. + (current_ui_gdb_stdout_ptr, current_ui_gdb_stdin_ptr) + (current_ui_gdb_stderr_ptr, current_ui_gdb_stdlog_ptr): Declare. + (gdb_stdout, gdb_stdin, gdb_stderr, gdb_stdlog): Reimplement as + macros. + +2016-06-21 Pedro Alves + + * event-top.c: Update readline-related comments. + (input_handler, call_readline): Delete globals. + (gdb_rl_callback_handler): Call the current UI's input_handler + method. + (change_line_handler): Adjust to set current UI's properties + instead of globals. + (current_ui_, current_ui): New globals. + (get_command_line_buffer): Rewrite to refer to the current UI. + (stdin_event_handler): Adjust to call the call_readline method of + the current UI. + (gdb_readline_no_editing_callback): Adjust to call the current UI's + input_handler method. + (gdb_setup_readline): Adjust to set current UI's properties + instead of globals. + * event-top.h (call_readline, input_handler): Delete declarations. + * mi/mi-interp.c (mi_interpreter_resume): Adjust to set current + UI's properties instead of globals. + * top.c (gdb_readline_wrapper_cleanup): Adjust to set current UI's + properties instead of globals. + (gdb_readline_wrapper): Adjust to call and set current UI's + methods instead of globals. + * top.h: Include buffer.h and event-loop.h. + (struct ui): New struct. + (current_ui): New declaration. + +2016-06-21 Pedro Alves + + * ada-lang.c (ada_exception_name_addr_1): Add comment. + (print_it_exception): Select the current frame. + +2016-06-17 Yan-Ting Lin + + * Makefile.in (ALL_TARGET_OBS): Add nds32-tdep.o. + (HFILES_NO_SRCDIR): Add nds32-tdep.h. + (ALLDEPFILES): Add nds32-tdep.c. + * NEWS: Mention new NDS32 port. + * configure.tgt: Add NDS32. + * nds32-tdep.c: New file. + * nds32-tdep.h: New file. + * features/Makefile (XMLTOC): Add nds32.xml. + * features/nds32-core.xml: New file. + * features/nds32-fpu.xml: New file. + * features/nds32-system.xml: New file. + * features/nds32.c: New file (generated). + * features/nds32.xml: New file. + +2016-06-14 John Baldwin + + * v850-tdep.c (v850_use_struct_convention): Trim type length checks. + +2016-06-14 John Baldwin + + * tui/tui-stack.c (tui_show_frame_info): Fix type mismatch. + +2016-06-14 John Baldwin + + * rs6000-tdep.c (ppc_process_record_op31): Initialize ra. + +2016-06-13 Nick Clifton + + * gdbtypes.c (replace_type): Fix assertion. + +2016-06-10 Tom Tromey + + * gdbtypes.c (arch_type, arch_integer_type, arch_character_type) + (arch_boolean_type, arch_float_type, arch_complex_type) + (arch_flags_type, append_flags_type_field) + (append_flags_type_flag, arch_composite_type) + (append_composite_type_field_raw) + (append_composite_type_field_aligned) + (append_composite_type_field): Make "name" parameter const. + * gdbtypes.h (arch_type, arch_integer_type, arch_character_type) + (arch_boolean_type, arch_float_type, arch_complex_type) + (append_composite_type_field, append_composite_type_field_aligned) + (append_composite_type_field_raw, arch_flags_type) + (append_flags_type_field, append_flags_type_flag): Constify. + +2016-06-10 Tom Tromey + + PR rust/20110: + * rust-exp.y (lex_number): Don't truncate large numbers to i32. + +2016-06-10 Tom Tromey + + * Makefile.in (COMMON_OBS): Remove rust-exp.o. + (YYFILES): Add rust-exp.c. + (YYOBJ): Add rust-exp.o. + (local-maintainer-clean): Remove rust-exp.c. + +2016-06-09 Toshihito Kikuchi + + * NEWS: Mention that GDB now supports a negative repeat count in + the 'x' command. + * printcmd.c (decode_format): Allow '-' in the parameter + "string_ptr" to accept a negative repeat count. + (find_instruction_backward): New function. + (read_memory_backward): New function. + (integer_is_zero): New function. + (find_string_backward): New function. + (do_examine): Use new functions to examine memory backward. + (_initialize_printcmd): Mention that 'x' command supports a negative + repeat count. + +2016-06-09 Toshihito Kikuchi + + * MAINTAINERS (Write After Approval): Add Toshihito Kikuchi. + +2016-06-09 Tom Tromey + + PR python/19819: + * python/py-xmethods.c (invoke_method_name) + (py_get_result_type_method_name, py_invoke_method_name): Remove. + (gdbpy_initialize_xmethods): Don't initialize + py_invoke_method_name, py_get_result_type_method_name. + +2016-06-07 Simon Marchi + + * mi/mi-interp.c (mi_record_changed): Add missing braces. + +2016-06-07 Bernhard Heckel + + * findvar.c (follow_static_link): Check for valid pointer. + +2016-06-06 Simon Marchi + + * NEWS: Mention the new fields in =record-started. + * common/btrace-common.h (btrace_format_short_string): New function + declaration. + * common/btrace-common.c (btrace_format_short_string): New + function. + * mi/mi-interp.c (mi_record_changed): Output method and format + fields in the =record-started record. + * record-btrace.c (record_btrace_open): Adapt record_changed + notification. + * record-full.c (record_full_open): Likewise. + * record.c (cmd_record_stop): Likewise. + +2016-06-02 Jon Turney + + * windows-nat.c (handle_output_debug_string): Return type of + gdb_signal_from_host() is gdb_signal, not an int. + (windows_get_exec_module_filename): Add pointer casts for C++. + +2016-06-02 Tom Tromey + + PR python/18984: + * python/python.c (gdbpy_solib_name): Use GDB_PY_LLU_ARG. + +2016-06-01 Pedro Alves + + * remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa) + (remote_fio_osa) + (remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set) + (remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler): + Delete. + (remote_fileio_o_quit_handler): New global. + (remote_fileio_quit_handler): New function. + (remote_fileio_reply): Check the quit flag instead of the custom + 'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead + of changing the SIGINT handler. + (do_remote_fileio_request): Override the quit handler instead of + changing the SIGINT handler. + +2016-06-01 Nick Clifton + + * common/common-utils.c (xmalloc_failed): New function. Provided + so that the version in libiberty is not linked in. + +2016-06-01 Markus Metzger + + * infcmd.c (skip_finish_frames): New. + (finish_command): Call skip_finish_frames. + +2016-06-01 Yao Qi + + PR remote/19998 + * remote-fileio.c (remote_fileio_ctrl_c_signal_handler): Call + quit_serial_event_set. + 2016-06-01 Joel Brobecker - * version.in: Set GDB version number to 7.11.1. + GDB 7.11.1 released. + +2016-05-31 Martin Galvan + + PR c++/19893 + * dwarf2loc.c (coerce_pieced_ref, indirect_synthetic_pointer, + fetch_const_value_from_synthetic_pointer): New functions. + (indirect_pieced_value): Move lower half to indirect_synthetic_pointer. + (pieced_value_funcs): Implement coerce_ref. + * valops.c (value_addr): Call coerce_ref for synthetic references. + * valprint.c (valprint_check_validity): Return true for synthetic + references. Also, don't show "" if they reference + addressable values. + (generic_val_print_ref): Handle synthetic references. Also move some + code to print_ref_address. + (print_ref_address, get_value_addr_contents): New functions. + +2016-05-30 Jan Kratochvil + + PR c++/15231 + * dwarf2read.c (enum pc_bounds_kind): Add PC_BOUNDS_INVALID. + (process_psymtab_comp_unit_reader, read_func_scope): Adjust callers. + (read_lexical_block_scope): Import DIEs from bare DW_TAG_lexical_block. + (read_call_site_scope): Adjust callers. + (dwarf2_get_pc_bounds): Implement pc_bounds_invalid. + (dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers. + +2016-05-30 Jan Kratochvil + + Code cleanup: dwarf2_get_pc_bounds: -1/0/+1 -> enum + * dwarf2read.c (enum pc_bounds_kind) New. + (dwarf2_get_pc_bounds): Use it in the declaration. + (process_psymtab_comp_unit_reader): Adjust caller. Rename has_pc_info + to cu_bounds_kind. + (read_func_scope, read_lexical_block_scope, read_call_site_scope): + Adjust callers. + (dwarf2_get_pc_bounds): Use enum pc_bounds_kind in the definition. + (dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers. -2016-05-25 Pedro Alves +2016-05-29 Jan Kratochvil + + * NEWS (QCatchSyscalls): Remove the parameter. Include ... + (QCatchSyscalls:1 in qSupported) ... this separate entry which got + deleted. + +2016-05-29 Jan Kratochvil + + * NEWS (N stop reply): Remove empty line. + +2016-05-28 Alan Modra + + * compile/compile-object-load.c (link_callbacks_multiple_definition, + link_callbacks_warning, link_callbacks_undefined_symbol, + link_callbacks_undefined_symbol, link_callbacks_reloc_overflow, + link_callbacks_reloc_dangerous, + link_callbacks_unattached_reloc): Return void. + +2016-05-27 Andrew Burgess + + * opencl-lang.c (evaluate_subexp_opencl): If + EVAL_AVOID_SIDE_EFFECTS mode, forward the VALUE_LVAL attribute to + the returned value in the STRUCTOP_STRUCT case. + +2016-05-27 Andrew Burgess + + * eval.c (evaluate_subexp_standard): If EVAL_AVOID_SIDE_EFFECTS + mode, forward the VALUE_LVAL attribute to the returned value in + the STRUCTOP_PTR case. + +2016-05-25 Tom Tromey + + * python/py-value.c (value_object_as_number): Use correct spelling + of HAVE_LIBPYTHON2_4. + +2016-05-25 Bernhard Heckel + + * f-typeprint.c (f_type_print_base): Replace 0 by show. + +2016-05-25 Bernhard Heckel + + * f-typeprint.c (f_type_print_base): Decrease show by one. + +2016-05-25 Bernhard Heckel + + * f-typeprint.c (f_type_print_base): Don't print fields when show < 0. + +2016-05-25 Bernhard Heckel + + * f-typeprint.c (f_type_print_base): Take print level into account. + +2016-05-24 Tom Tromey + + PR python/17386: + * python/py-value.c (value_object_as_number): Add + nb_inplace_floor_divide, nb_inplace_true_divide, nb_index. + +2016-05-24 Tom Tromey + + * python/py-value.c (value_object_as_number): Add + nb_inplace_divide for Python 2. + +2016-05-23 Tom Tromey + + PR python/17981: + * python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple + when there are no breakpoints. + +2016-05-24 Pedro Alves PR gdb/19828 * linux-nat.c (attach_proc_task_lwp_callback): Mark the lwp resumed, and add the thread to GDB's thread list. -2016-05-25 Pedro Alves +2016-05-24 Pedro Alves PR gdb/19828 * linux-nat.c (get_pending_status): If the thread reported the event to the core and it's pending, use the pending status signal number. +2016-05-24 Pedro Alves + + PR gdb/19828 + * linux-nat.c (lwp_lwpid_htab): New htab. + (lwp_info_hash, lwp_lwpid_htab_eq, lwp_lwpid_htab_create) + (lwp_lwpid_htab_add_lwp): New functions. + (lwp_list): Tweak comment. + (lwp_list_add, lwp_list_remove, lwp_lwpid_htab_remove_pid): New + functions. + (purge_lwp_list): Rewrite, using htab_traverse_noresize. + (add_initial_lwp): Add lwp to htab too. Use lwp_list_add. + (delete_lwp): Use lwp_list_remove. Remove htab too. + (find_lwp_pid): Search in htab. + (_initialize_linux_nat): Call lwp_lwpid_htab_create. + * linux-nat.h (struct lwp_info) : New field. + +2016-05-24 Pedro Alves + + PR gdb/19828 + * linux-nat.c (lwp_lwpid_htab): New htab. + (lwp_info_hash, lwp_lwpid_htab_eq, lwp_lwpid_htab_create) + (lwp_lwpid_htab_add_lwp): New functions. + (lwp_list): Tweak comment. + (lwp_list_add, lwp_list_remove, lwp_lwpid_htab_remove_pid): New + functions. + (purge_lwp_list): Rewrite, using htab_traverse_noresize. + (add_initial_lwp): Add lwp to htab too. Use lwp_list_add. + (delete_lwp): Use lwp_list_remove. Remove htab too. + (find_lwp_pid): Search in htab. + (_initialize_linux_nat): Call lwp_lwpid_htab_create. + * linux-nat.h (struct lwp_info) : New field. + +2016-05-24 Pedro Alves + + PR gdb/19828 + * linux-nat.c (linux_resume_one_lwp_throw): Clear the LWP's core + field. + (linux_nat_update_thread_list): Don't fetch the core if already + known. + +2016-05-24 Pedro Alves + + PR gdb/19828 + * linux-tdep.c (find_mapping_size): Delete. + (linux_vsyscall_range_raw): Rewrite reading from + /proc/PID/task/PID/maps directly instead of using + gdbarch_find_memory_regions. + +2016-05-24 Pedro Alves + + PR gdb/19828 + * linux-nat.c (report_thread_events): New global. + (linux_handle_extended_wait): Report + TARGET_WAITKIND_THREAD_CREATED if thread event reporting is + enabled. + (wait_lwp, linux_nat_filter_event): Report all thread exits if + thread event reporting is enabled. Remove comment. + (filter_exit_event): New function. + (linux_nat_wait_1): Use it. + (linux_nat_thread_events): New function. + (linux_nat_add_target): Install it as target_thread_events method. + +2016-05-24 Yan-Ting Lin + + * MAINTAINERS (Write After Approval): Add "Yan-Ting Lin". + +2016-05-23 Yao Qi + + * arch-utils.c (default_code_of_frame_writable): New function. + * arch-utils.h (default_code_of_frame_writable): Declare. + * arm-tdep.c (arm_code_of_frame_writable): New function. + (arm_gdbarch_init): Install gdbarch method + code_of_frame_writable if the target is M-profile. + * frame.c (skip_unwritable_frames): New function. + * frame.h (skip_unwritable_frames): Declare. + * gdbarch.sh (code_of_frame_writable): New. + * gdbarch.c, gdbarch.h: Re-generated. + * infcmd.c (finish_command): Call skip_unwritable_frames. + +2016-05-23 Tom Tromey + + PR python/19438, PR python/18393: + * python/py-objfile.c (objfpy_initialize): Initialize self->dict. + * python/py-progspace.c (pspy_initialize): Initialize self->dict. + +2016-05-23 Gary Benson + + * nat/gdb_thread_db.h (td_thr_validate_ftype): Remove typedef. + * linux-thread-db.c (struct thread_db_info) : + Remove field. + (try_thread_db_load_1): Remove td_thr_validate initialization. + +2016-05-23 Jon Boden (tiny change) + + * configure.ac: Search for libutil-freebsd as alternative to libutil. + * configure: Re-generated. + +2016-05-19 Andreas Schwab + + * ia64-libunwind-tdep.c (libunwind_descr): Add cast from void *. + (libunwind_frame_set_descr): Likewise. + (libunwind_frame_cache): Likewise. + (libunwind_frame_dealloc_cache): Likewise. + (libunwind_frame_sniffer): Likewise. + (libunwind_search_unwind_table): Likewise. + (libunwind_sigtramp_frame_sniffer): Likewise. + (libunwind_get_reg_special): Likewise. + (libunwind_load): Likewise. + * ia64-linux-nat.c (ia64_linux_fetch_register): Likewise. + (ia64_linux_store_register): Likewise. + (ia64_linux_xfer_partial): Likewise. + * ia64-tdep.c (ia64_access_reg): Likewise. + (ia64_access_fpreg): Likewise. + (ia64_access_rse_reg): Likewise. + (ia64_access_rse_fpreg): Likewise. + +2016-05-18 Tom Tromey + + * rust-lang.c (rust_subscript): Initialize "high". + 2016-05-17 Simon Marchi PR gdb/20045 @@ -28,24 +2309,353 @@ whether to run async or not. (mi_cmd_exec_run): Likewise. -2016-05-16 Pedro Alves - - PR gdb/20039 - * mi/mi-interp.c (mi_new_thread): Put - target_terminal_ours_for_output in effect while outputting. - (mi_thread_exit): Use target_terminal_ours_for_output instead of - target_terminal_ours. - (mi_record_changed, mi_inferior_added, mi_inferior_appeared) - (mi_inferior_exit, mi_inferior_removed, mi_traceframe_changed) - (mi_tsv_created, mi_tsv_deleted, mi_tsv_modified) - (mi_breakpoint_created, mi_breakpoint_deleted) - (mi_breakpoint_modified, mi_solib_loaded, mi_solib_unloaded) - (mi_command_param_changed, mi_memory_changed) - (report_initial_inferior): Use target_terminal_ours_for_output - instead of target_terminal_ours. Restore terminal settings. - * mi/mi-main.c (mi_execute_command): Use - target_terminal_ours_for_output instead of target_terminal_ours. - Restore terminal settings. +2016-05-17 Tom Tromey + + * std-operator.def (OP_RANGE): Rename from OP_F90_RANGE. + * rust-lang.c: Don't include f-lang.h. + (rust_range, rust_compute_range, rust_subscript) + (rust_evaluate_subexp): Update. + * rust-exp.y: Don't include f-lang.h. + (ast_range, convert_ast_to_expression): Update. + * parse.c (operator_length_standard): Update. + * f-lang.h (enum f90_range_type): Move to expression.h. + * f-exp.y: Use OP_RANGE. + * expression.h (enum range_type): New enum; renamed from + f90_range_type. + * expprint.c: Don't include f-lang.h. + (print_subexp_standard, dump_subexp_body_standard): Use OP_RANGE. + * eval.c (value_f90_subarray, evaluate_subexp_standard): Update. + +2016-05-17 Tom Tromey + + * NEWS: Add Rust item. + +2016-05-17 Tom Tromey + Manish Goregaokar + + * symtab.c (symbol_find_demangled_name): Handle Rust. + * symfile.c (init_filename_language_table): Treat ".rs" as Rust. + * std-operator.def (STRUCTOP_ANONYMOUS, OP_RUST_ARRAY): New + constants. + * rust-lang.h: New file. + * rust-lang.c: New file. + * rust-exp.y: New file. + * dwarf2read.c (read_file_scope): Add Rust producer sniffing. + (dwarf2_compute_name, read_func_scope, read_structure_type) + (read_base_type, read_subrange_type, set_cu_language) + (new_symbol_full, determine_prefix): Handle Rust. + * defs.h (enum language) : New constant. + * Makefile.in (SFILES): Add rust-exp.y, rust-lang.c. + (COMMON_OBS): Add rust-exp.o, rust-lang.o. + +2016-05-17 Tom Tromey + + * valprint.h (struct generic_val_print_array) : New fields. + * valprint.c (generic_val_print_array): Add "decorations" + parameter. Use "array_start", "array_end". + (generic_val_print) : Update. + * p-valprint.c (p_decorations): Update. + * m2-valprint.c (m2_decorations): Update. + * f-valprint.c (f_decorations): Update. + * c-valprint.c (c_decorations): Update. + +2016-05-17 Tom Tromey + + * NEWS: Add "maint selftest" entry. + * selftest.h: New file. + * selftest.c: New file. + * maint.c: Include selftest.h. + (maintenance_selftest): New function. + (_initialize_maint_cmds): Add "maint selftest" command. + * configure.ac (GDB_SELF_TEST): Maybe define. + * config.in, configure: Rebuild. + * Makefile.in (SFILES): Add selftest.c. + (COMMON_OBS): Add selftest.o. + +2016-05-17 Tom Tromey + + * expprint.c: Include f-lang.h. + (print_subexp_standard, dump_subexp_body_standard): Handle + OP_F90_RANGE. + +2016-05-17 Tom Tromey + + * Makefile.in (init.c): Search .y files for initialization + functions. + +2016-05-12 Doug Evans + + PR symtab/19999 + * dwarf2loc.c (dwarf2_find_location_expression): For DWO files still + add base_offset. + +2016-05-10 Trevor Saunders + + * iq2000-tdep.c (iq2000_scan_prologue): Remove if that shouldn't guard + anything. + * linespec.c (add_sal_to_sals): Restore call to symtab_to_fullname. + +2016-05-10 Thomas Preud'homme + + * arm-tdep.c (arm_elf_make_msymbol_special): Use + ARM_GET_SYM_BRANCH_TYPE to get branch type of a symbol. + +2016-05-07 Trevor Saunders + + * aarch64-linux-tdep.c (aarch64_linux_sigframe_init): Remove unused + variables. + * aarch64-tdep.c (aarch64_skip_prologue): Likewise. + (aarch64_scan_prologue): Likewise. + (aarch64_prologue_prev_register): Likewise. + (aarch64_dwarf2_prev_register): Likewise. + (pass_in_v): Likewise. + (aarch64_push_dummy_call): Likewise. + (aarch64_breakpoint_from_pc): Likewise. + (aarch64_return_in_memory): Likewise. + (aarch64_return_value): Likewise. + (aarch64_displaced_step_b_cond): Likewise. + (aarch64_displaced_step_cb): Likewise. + (aarch64_displaced_step_tb): Likewise. + (aarch64_gdbarch_init): Likewise. + (aarch64_process_record): Likewise. + * alpha-mdebug-tdep.c (alpha_mdebug_init_abi): Likewise. + * alpha-tdep.c (_initialize_alpha_tdep): Likewise. + * amd64-dicos-tdep.c (amd64_dicos_init_abi): Likewise. + * amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Likewise. + * amd64-tdep.c (fixup_riprel): Likewise. + * amd64-windows-tdep.c (amd64_windows_frame_decode_epilogue): Likewise. + (amd64_windows_frame_decode_insns): Likewise. + (amd64_windows_frame_cache): Likewise. + (amd64_windows_frame_prev_register): Likewise. + (amd64_windows_frame_this_id): Likewise. + (amd64_windows_init_abi): Likewise. + * arm-linux-tdep.c (arm_linux_get_syscall_number): Likewise. + (arm_linux_get_next_pcs_syscall_next_pc): Likewise. + * arm-symbian-tdep.c (arm_symbian_init_abi): Likewise. + * arm-tdep.c (arm_make_epilogue_frame_cache): Likewise. + (arm_epilogue_frame_prev_register): Likewise. + (arm_record_vdata_transfer_insn): Likewise. + (arm_record_exreg_ld_st_insn): Likewise. + * auto-load.c (execute_script_contents): Likewise. + (print_scripts): Likewise. + * avr-tdep.c (avr_frame_prev_register): Likewise. + (avr_push_dummy_call): Likewise. + * bfin-linux-tdep.c (bfin_linux_sigframe_init): Likewise. + * bfin-tdep.c (bfin_gdbarch_init): Likewise. + * blockframe.c (find_pc_partial_function_gnu_ifunc): Likewise. + * break-catch-throw.c (fetch_probe_arguments): Likewise. + * breakpoint.c (breakpoint_xfer_memory): Likewise. + (breakpoint_init_inferior): Likewise. + (breakpoint_inserted_here_p): Likewise. + (software_breakpoint_inserted_here_p): Likewise. + (hardware_breakpoint_inserted_here_p): Likewise. + (bpstat_what): Likewise. + (break_range_command): Likewise. + (save_breakpoints): Likewise. + * coffread.c (coff_symfile_read): Likewise. + * cris-tdep.c (cris_push_dummy_call): Likewise. + (cris_scan_prologue): Likewise. + (cris_register_size): Likewise. + (_initialize_cris_tdep): Likewise. + * d-exp.y: Likewise. + * dbxread.c (dbx_read_symtab): Likewise. + (process_one_symbol): Likewise. + (coffstab_build_psymtabs): Likewise. + (elfstab_build_psymtabs): Likewise. + * dicos-tdep.c (dicos_init_abi): Likewise. + * disasm.c (do_mixed_source_and_assembly): Likewise. + (gdb_disassembly): Likewise. + * dtrace-probe.c (dtrace_process_dof): Likewise. + * dwarf2read.c (error_check_comp_unit_head): Likewise. + (build_type_psymtabs_1): Likewise. + (skip_one_die): Likewise. + (process_imported_unit_die): Likewise. + (dwarf2_physname): Likewise. + (read_file_scope): Likewise. + (setup_type_unit_groups): Likewise. + (create_dwo_cu_reader): Likewise. + (create_dwo_cu): Likewise. + (create_dwo_unit_in_dwp_v1): Likewise. + (create_dwo_unit_in_dwp_v2): Likewise. + (lookup_dwo_unit_in_dwp): Likewise. + (free_dwo_file): Likewise. + (check_producer): Likewise. + (dwarf2_add_typedef): Likewise. + (dwarf2_add_member_fn): Likewise. + (read_unsigned_leb128): Likewise. + (read_signed_leb128): Likewise. + (dwarf2_const_value): Likewise. + (follow_die_sig_1): Likewise. + (dwarf_decode_macro_bytes): Likewise. + * extension.c (restore_active_ext_lang): Likewise. + * frv-linux-tdep.c (frv_linux_sigtramp_frame_cache): Likewise. + * ft32-tdep.c (ft32_analyze_prologue): Likewise. + * gdbtypes.c (lookup_typename): Likewise. + (resolve_dynamic_range): Likewise. + (check_typedef): Likewise. + * h8300-tdep.c (h8300_is_argument_spill): Likewise. + (h8300_gdbarch_init): Likewise. + * hppa-tdep.c (hppa32_push_dummy_call): Likewise. + (hppa_frame_this_id): Likewise. + (_initialize_hppa_tdep): Likewise. + * hppanbsd-tdep.c (hppanbsd_sigtramp_cache_init): Likewise. + * hppaobsd-tdep.c (hppaobsd_supply_fpregset): Likewise. + * i386-dicos-tdep.c (i386_dicos_init_abi): Likewise. + * i386-tdep.c (i386_bnd_type): Likewise. + (i386_gdbarch_init): Likewise. + (i386_mpx_bd_base): Likewise. + * i386nbsd-tdep.c (i386nbsd_sigtramp_cache_init): Likewise. + * i386obsd-tdep.c (i386obsd_elf_init_abi): Likewise. + * ia64-tdep.c (examine_prologue): Likewise. + (ia64_frame_cache): Likewise. + (ia64_push_dummy_call): Likewise. + * infcmd.c (finish_command_fsm_async_reply_reason): Likewise. + (default_print_one_register_info): Likewise. + * infrun.c (infrun_thread_ptid_changed): Likewise. + (thread_still_needs_step_over): Likewise. + (stop_all_threads): Likewise. + (restart_threads): Likewise. + (keep_going_stepped_thread): Likewise. + * iq2000-tdep.c (iq2000_scan_prologue): Likewise. + * language.c (language_init_primitive_type_symbols): Likewise. + * linespec.c (add_sal_to_sals): Likewise. + * linux-nat.c (status_callback): Likewise. + (kill_unfollowed_fork_children): Likewise. + (linux_nat_kill): Likewise. + * linux-tdep.c (linux_fill_prpsinfo): Likewise. + * linux-thread-db.c (thread_db_notice_clone): Likewise. + (record_thread): Likewise. + * location.c (string_to_event_location_basic): Likewise. + * m32c-tdep.c (m32c_prev_register): Likewise. + * m32r-linux-tdep.c (m32r_linux_init_abi): Likewise. + * m32r-tdep.c (decode_prologue): Likewise. + * m68klinux-tdep.c (m68k_linux_sigtramp_frame_cache): Likewise. + * machoread.c (macho_symtab_read): Likewise. + (macho_symfile_read): Likewise. + (macho_symfile_offsets): Likewise. + * maint.c (set_per_command_cmd): Likewise. + * mi/mi-cmd-stack.c (mi_cmd_stack_list_locals): Likewise. + (mi_cmd_stack_list_variables): Likewise. + * mi/mi-main.c (mi_cmd_exec_run): Likewise. + (output_register): Likewise. + (mi_cmd_execute): Likewise. + (mi_cmd_trace_define_variable): Likewise. + (print_variable_or_computed): Likewise. + * minsyms.c (prim_record_minimal_symbol_full): Likewise. + * mn10300-tdep.c (mn10300_frame_prev_register): Likewise. + * msp430-tdep.c (msp430_pseudo_register_write): Likewise. + * mt-tdep.c (mt_registers_info): Likewise. + * nios2-tdep.c (nios2_analyze_prologue): Likewise. + (nios2_push_dummy_call): Likewise. + (nios2_frame_unwind_cache): Likewise. + (nios2_stub_frame_cache): Likewise. + (nios2_stub_frame_sniffer): Likewise. + (nios2_gdbarch_init): Likewise. + * ppc-ravenscar-thread.c: Likewise. + * ppcfbsd-tdep.c (ppcfbsd_sigtramp_frame_cache): Likewise. + * python/py-evts.c (add_new_registry): Likewise. + * python/py-finishbreakpoint.c (bpfinishpy_init): Likewise. + (bpfinishpy_detect_out_scope_cb): Likewise. + * python/py-framefilter.c (py_print_value): Likewise. + * python/py-inferior.c (infpy_write_memory): Likewise. + * python/py-infevents.c (create_inferior_call_event_object): Likewise. + * python/py-infthread.c (thpy_get_ptid): Likewise. + * python/py-linetable.c (ltpy_get_pcs_for_line): Likewise. + (ltpy_get_all_source_lines): Likewise. + (ltpy_is_valid): Likewise. + (ltpy_iternext): Likewise. + * python/py-symtab.c (symtab_and_line_to_sal_object): Likewise. + * python/py-unwind.c (pyuw_object_attribute_to_pointer): Likewise. + (unwind_infopy_str): Likewise. + * python/py-varobj.c (py_varobj_get_iterator): Likewise. + * ravenscar-thread.c (ravenscar_inferior_created): Likewise. + * rs6000-aix-tdep.c (rs6000_push_dummy_call): Likewise. + * rs6000-lynx178-tdep.c (rs6000_lynx178_push_dummy_call): Likewise. + * rs6000-tdep.c (ppc_deal_with_atomic_sequence): Likewise. + * s390-linux-tdep.c (s390_supply_tdb_regset): Likewise. + (s390_frame_prev_register): Likewise. + (s390_dwarf2_frame_init_reg): Likewise. + (s390_record_vr): Likewise. + (s390_process_record): Likewise. + * score-tdep.c (score_push_dummy_call): Likewise. + (score3_analyze_prologue): Likewise. + * sh-tdep.c (sh_extract_return_value_nofpu): Likewise. + * sh64-tdep.c (sh64_analyze_prologue): Likewise. + (sh64_push_dummy_call): Likewise. + (sh64_extract_return_value): Likewise. + (sh64_do_fp_register): Likewise. + * solib-aix.c (solib_aix_get_section_offsets): Likewise. + * solib-darwin.c (darwin_read_exec_load_addr_from_dyld): Likewise. + (darwin_solib_read_all_image_info_addr): Likewise. + * solib-dsbt.c (enable_break): Likewise. + * solib-frv.c (enable_break2): Likewise. + (frv_fdpic_find_canonical_descriptor): Likewise. + * solib-svr4.c (svr4_handle_solib_event): Likewise. + * sparc-tdep.c (sparc_skip_stack_check): Likewise. + * sparc64-linux-tdep.c (sparc64_linux_get_longjmp_target): Likewise. + * sparcobsd-tdep.c (sparc32obsd_init_abi): Likewise. + * spu-tdep.c (info_spu_dma_cmdlist): Likewise. + * stack.c (read_frame_local): Likewise. + * symfile.c (symbol_file_add_separate): Likewise. + (remove_symbol_file_command): Likewise. + * symmisc.c (maintenance_print_one_line_table): Likewise. + * symtab.c (symbol_cache_flush): Likewise. + (basic_lookup_transparent_type): Likewise. + (sort_search_symbols_remove_dups): Likewise. + * target.c (target_memory_map): Likewise. + (target_detach): Likewise. + (target_resume): Likewise. + (acquire_fileio_fd): Likewise. + (target_store_registers): Likewise. + * thread.c (print_thread_info_1): Likewise. + * tic6x-tdep.c (tic6x_analyze_prologue): Likewise. + * tilegx-linux-tdep.c (tilegx_linux_sigframe_init): Likewise. + * tilegx-tdep.c (tilegx_push_dummy_call): Likewise. + (tilegx_analyze_prologue): Likewise. + (tilegx_stack_frame_destroyed_p): Likewise. + (tilegx_frame_cache): Likewise. + * tracefile.c (trace_save): Likewise. + * tracepoint.c (encode_actions_and_make_cleanup): Likewise. + (start_tracing): Likewise. + (print_one_static_tracepoint_marker): Likewise. + * tui/tui.c (tui_enable): Likewise. + * valops.c (value_struct_elt_bitpos): Likewise. + (find_overload_match): Likewise. + (find_oload_champ): Likewise. + * value.c (value_contents_copy_raw): Likewise. + * windows-tdep.c (windows_get_tlb_type): Likewise. + * x86-linux-nat.c (x86_linux_enable_btrace): Likewise. + * xcoffread.c (record_minimal_symbol): Likewise. + (scan_xcoff_symtab): Likewise. + * xtensa-tdep.c (execute_code): Likewise. + (xtensa_gdbarch_init): Likewise. + (_initialize_xtensa_tdep): Likewise. + +2016-05-04 Ulrich Weigand + + * spu-linux-nat.c (spu_bfd_iovec_pread): Add pointer cast for C++. + (spu_bfd_open): Likewise. + +2016-05-04 Yao Qi + + PR gdb/19947 + * corefile.c (read_memory): Rename it to ... + (read_memory_object): ... it. Add parameter object. + (read_memory): Call read_memory_object. + (read_stack): Likewise. + (read_code): Likewise. + +2016-05-03 Yunlian Jiang + Doug Evans + + PR symtab/19914 + * dwarf2read.c (open_and_init_dwp_file): Look at backlink if objfile + is separate debug file. + +2016-05-03 Don Breazeal + + * serial.h (gdb_pipe): Fix argument names in comment. 2016-05-03 Pedro Alves @@ -58,6 +2668,17 @@ * python/python.c (_initialize_python) [IS_PY3K]: Remove dead code. +2016-05-03 Pedro Alves + + * configure.ac (PYTHON_LIBS): Sed away "-Xlinker -export-dynamic". + * configure: Regenerate. + +2016-05-03 Pedro Alves + + * configure.ac (checking for the dynamic export flag): Add + $PYTHON_CPPFLAGS to CPPFLAGS. + * configure: Regenerate. + 2016-05-03 Kyrylo Tkachov * symfile.c (find_pc_overlay): Add braces to avoid -Wparentheses @@ -65,34 +2686,425 @@ (find_pc_mapped_section): Likewise. (list_overlays_command): Likewise. +2016-05-02 Eli Zaretskii + + * windows-nat.c (_initialize_check_for_gdb_ini): Fix off-by-one + error in allocation of space for "$HOME/.gdbinit" string. This + caused GDB to abort on startup whenever a '~/gdb.ini' file was + actually found, because xsnprintf would hit an assertion + violation. + +2016-04-28 Simon Marchi + + * cli/cli-decode.c (help_cmd_list): Do not list commands that + are deprecated. + 2016-04-27 Jan Kratochvil * remote.c (remote_start_remote): Detect PACKET_vFile_setfs.support. +2016-04-27 Martin Galvan + + * c-valprint.c (c_value_print): Always convert val back to reference + type if we converted it to a pointer type. + +2016-04-27 Andreas Arnez + + * configure.ac: Enhance configure check for babeltrace to reject + non-C++-enabled versions. + * configure: Regenerate. + +2016-04-26 Sanimir Agovic + Keven Boell + Bernhard Heckel + + * f-valprint.c (f77_create_arrayprint_offset_tbl): Remove + function. + (F77_DIM_SIZE, F77_DIM_OFFSET): Remove macro. + (f77_print_array_1): Use value_subscript to subscript a + value array. + (f77_print_array): Remove call to f77_create_arrayprint_offset_tbl. + (f_val_print): Use value_field to construct a field value. + +2016-04-26 Bernhard Heckel + + * valarith.c (value_address): Resolve dynamic types. + +2016-04-26 Bernhard Heckel + Keven Boell + + * NEWS: Add new supported features for fortran. + * gdbtypes.c (remove_dyn_prop): New. + (resolve_dynamic_struct): Keep type length for fortran structs. + * gdbtypes.h: Forward declaration of new function. + * value.c (value_address): Return dynamic resolved location of a value. + (set_value_component_location): Adjust the value address + for single value prints. + (value_primitive_field): Support value types with a dynamic location. + (set_internalvar): Remove dynamic location property of + internal variables. + +2016-04-25 Pedro Alves + Yao Qi + + * mem-break.c (set_raw_breakpoint_at): Create a raw breakpoint + object. Insert it if it is not inserted yet. Increase the + refcount and link it into the proc's raw breakpoint list. + +2016-04-25 Yao Qi + + * breakpoint.c (should_be_inserted): Return 0 if the location's + owner is not single step breakpoint or single step breakpoint's + thread isn't the thread which is stepping past a breakpoint. + * gdbarch.sh (software_single_step): Update comments. + * gdbarch.h: Regenerated. + * infrun.c (struct step_over_info) : New field. + (set_step_over_info): New argument 'thread'. Callers updated. + (clear_step_over_info): Set field thread to -1. + (thread_is_stepping_over_breakpoint): New function. + * infrun.h (thread_is_stepping_over_breakpoint): Declaration. + +2016-04-22 Edjunior Barbosa Machado + + * ppc-linux-nat.c (ppc_linux_read_description): Use PPC_FEATURE_HAS_VSX + and PPC_FEATURE_HAS_ALTIVEC to check if such features are available. + +2016-04-22 Yao Qi + + * valops.c (read_value_memory): New local variable 'stack'. + Set it to either TARGET_OBJECT_STACK_MEMORY or + TARGET_OBJECT_MEMORY. + +2016-04-22 Pedro Alves + + * ada-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * ada-lang.c (ada_language_defn): Adjust. + * ada-lang.h (ada_error): Rename to ... + (ada_yyerror): ... this. + * c-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Adjust. + * c-lang.h (c_error): Rename to ... + (c_yyerror): ... this. + * d-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * d-lang.c (d_language_defn): Adjust. + * d-lang.h (d_error): Rename to ... + (d_yyerror): ... this. + * f-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * f-lang.c (f_language_defn): Adjust. + * f-lang.h (f_error): Rename to ... + (f_yyerror): ... this. + * go-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * go-lang.c (go_language_defn): Adjust. + * go-lang.h (go_error): Rename to ... + (go_yyerror): ... this. + * jv-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * jv-lang.c (java_language_defn): Adjust. + * jv-lang.h (java_error): Rename to ... + (java_yyerror): ... this. + * m2-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * m2-lang.c (m2_language_defn): Adjust. + * m2-lang.h (m2_error): Rename to ... + (m2_yyerror): ... this. + * objc-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * objc-lang.c (objc_language_defn): Adjust. + * opencl-lang.c (opencl_language_defn): Adjust. + * p-exp.y: Remove all yy symbol remappings. + (GDB_YY_REMAP_PREFIX): Define. + Include "yy-remap.h". + * p-lang.c (pascal_language_defn): Adjust. + * p-lang.h (pascal_error): Rename to ... + (pascal_yyerror): ... this. + * yy-remap.h: New file. + +2016-04-22 Pedro Alves + + * common/common-exceptions.h (GDB_XCPT_TRY): Remove mention of + the foreign frames issue. + [__cplusplus] (GDB_XCPT): Define as GDB_XCPT_TRY. + +2016-04-22 Pedro Alves + + * common/common-exceptions.c (enum catcher_state, struct catcher) + (current_catcher): Define in C++ mode too. + (exceptions_state_mc_catch): Call throw_exception_sjlj instead of + throw_exception. + (throw_exception_sjlj, throw_exception_cxx): New functions, + factored out from throw_exception. + (throw_exception): Reimplement. + * common/common-exceptions.h (exceptions_state_mc_init) + (exceptions_state_mc_action_iter) + (exceptions_state_mc_action_iter_1, exceptions_state_mc_catch): + Declare in C++ mode too. + (TRY): Rename to ... + (TRY_SJLJ): ... this. + (CATCH): Rename to ... + (CATCH_SJLJ): ... this. + (END_CATCH): Rename to ... + (END_CATCH_SJLJ): ... this. + [GDB_XCPT == GDB_XCPT_SJMP] (TRY, CATCH, END_CATCH): Map to SJLJ + equivalents. + (throw_exception): Update comments. + (throw_exception_sjlj): Declare. + * event-top.c (gdb_rl_callback_read_char_wrapper): Extend intro + comment. Wrap body in TRY_SJLJ/CATCH_SJLJ and rethrow any + intercepted exception. + (gdb_rl_callback_handler): New function. + (gdb_rl_callback_handler_install): Always install + gdb_rl_callback_handler as readline callback. + +2016-04-22 Pedro Alves + + * event-top.c (rl_callback_read_char_wrapper): Rename to ... + (gdb_rl_callback_read_char_wrapper): ... this. + (change_line_handler, gdb_setup_readline): Adjust. + +2016-04-22 Yao Qi + + * aarch32-linux-nat.c (aarch32_gp_regcache_supply): Clear CPSR + bits 20 to 23. + +2016-04-22 Joel Brobecker + + * MAINTAINER: Remove myself as AIX Maintainer. + +2016-04-22 Maciej W. Rozycki + + * mips-tdep.c (mips_gdbarch_init): For GDB_OSABI_LINUX set + `num_regs' to 90 rather than 79. Where a target description is + present adjust the setting appropriately. + +2016-04-21 Pedro Alves + + * common/common-exceptions.h (GDB_XCPT_TRY): Add comment. + (GDB_XCPT): Always define as GDB_XCPT_SJMP. + +2016-04-21 Pedro Alves + + * aix-thread.c (pdc_read_data, pdc_write_data): Add cast. + (aix_thread_resume): Use PTRACE_TYPE_ARG5. + * rs6000-nat.c (rs6000_ptrace64): Use PTRACE_TYPE_ARG5. + (rs6000_ptrace_ldinfo): Change type of 'ldi' local to void + pointer, and cast return to gdb_byte pointer. + +2016-04-21 Pedro Alves + + * s390-linux-nat.c (fetch_regset, store_regset, check_regset): Use + void * instead of gdb_byte *. + +2016-04-21 Pedro Alves + + * dwarf2read.c (try_open_dwop_file, open_dwo_file) + (file_file_name, file_full_name): Add char * cast to sentinel in + concat/reconcat calls. + * event-top.c (top_level_prompt): Likewise. + * guile/guile.c (initialize_scheme_side): Likewise. + * linux-tdep.c (linux_fill_prpsinfo): Likewise. + * macrotab.c (macro_source_fullname): Likewise. + * main.c (get_init_files, captured_main): Likewise. + * psymtab.c (psymtab_to_fullname): Likewise. + * python/python.c (_initialize_python) + (gdbpy_finish_initialization): Likewise. + * source.c (symtab_to_fullname): Likewise. + +2016-04-20 Pedro Alves + + * build-with-cxx.m4 (GDB_AC_BUILD_WITH_CXX): Default to yes. + * configure: Renegerate. + +2016-04-20 Pedro Alves + + * darwin-nat.c (darwin_decode_message): Use gdb_signal_from_host. + +2016-04-20 Pedro Alves + + * aarch64-tdep.c (aarch64_record_load_store): Change type of + 'reg_rm_val' local to ULONGEST. + +2016-04-20 Pedro Alves + + * darwin-nat.c (darwin_resume_thread): Add uintptr_t cast. + +2016-04-20 Doug Evans + + * symmisc.c (dump_symtab_1): Print owning compunit for identical + blockvectors. + +2016-04-20 Yao Qi + + * aarch32-linux-nat.c: Include "arch/arm-linux.h". + +2016-04-20 Yao Qi + + * arm-linux-tdep.h (ARM_CPSR_GREGNUM): Move it to ... + * arch/arm-linux.h: ... here. + +2016-04-19 John Baldwin + + * amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Change xstateregs + to void *. + (amd64bsd_store_inferior_registers): Likewise. + * fbsd-nat.c (resume_one_thread_cb): Explicitly cast data to ptid_t *. + (resume_all_threads_cb): Likewise. + * i386bsd-nat.c (i386bsd_supply_gregset): Cast gregs to char *. + (i386bsd_collect_gregset): Likewise. + (i386bsd_fetch_inferior_registers): Change xstateregs to void *. + (i386bsd_store_inferior_registers): Likewise. + +2016-04-19 John Baldwin + + * main.c (setup_alternate_signal_stack): Cast to char *. + +2016-04-19 Doug Evans + + * symmisc.c (dump_symtab_1, dump_symtab): Delete arg objfile. + All callers updated. + +2016-04-19 Doug Evans + + PR gdb/17911 + * source.c (is_regular_file): New arg errno_ptr. + All callers updated. + +2016-04-19 Andreas Arnez + + * linux-record.c (record_linux_system_call): Merge handling for + readlink/recv/read and pipe/pipe2. + +2016-04-14 Walfred Tedeschi + + * features/i386/amd64-mpx-linux.xml: Remove AVX feature. + * features/i386/amd64-mpx.xml: Remove AVX feature. + * features/i386/i386-mpx-linux.xml: Remove AVX feature. + * features/i386/i386-mpx.xml: Remove AVX feature. + * features/i386/amd64-mpx-linux.c: Regenerate. + * features/i386/amd64-mpx.c: Regenerate. + * features/i386/i386-mpx-linux.c: Regenerate. + * features/i386/i386-mpx.c: Regenerate. + * regformats/i386/amd64-mpx-linux.dat: Regenerate. + * regformats/i386/amd64-mpx.dat: Regenerate. + * regformats/i386/i386-mpx-linux.dat: Regenerate. + * regformats/i386/i386-mpx.dat: Regenerate. + +2016-04-16 Walfred Tedeschi + + * amd64-linux-tdep.c (features/i386/amd64-avx-mpx-linux.c): + New include. + (amd64_linux_core_read_description): Add case for + X86_XSTATE_AVX_MPX_MASK. + (_initialize_amd64_linux_tdep): Call initialize_tdesc_amd64_avx_mpx_linux. + * amd64-linux-tdep.h (tdesc_amd64_avx_mpx_linux): New definition. + * amd64-tdep.c (features/i386/amd64-avx-mpx.c): New include. + (amd64_target_description): Add case for X86_XSTATE_AVX_MPX_MASK. + (_initialize_amd64_tdep): Call initialize_tdesc_amd64_avx_mpx. + * common/x86-xstate.h (X86_XSTATE_MPX_MASK): Remove AVX bits. + (X86_XSTATE_AVX_MPX_MASK): New case. + * features/Makefile (i386/i386-avx-mpx, i386/i386-avx-mpx-linux) + (i386/amd64-avx-mpx, i386/amd64-avx-mpx-linux): New rules. + (i386/i386-avx-mpx-expedite, i386/i386-avx-mpx-linux-expedite) + (i386/amd64-avx-mpx-expedite, i386/amd64-avx-mpx-linux-expedite): + New expedites. + * i386-linux-tdep.c (features/i386/i386-avx-mpx-linux.c): New + include. + (i386_linux_core_read_description): Add case + X86_XSTATE_AVX_MPX_MASK. + (_initialize_i386_linux_tdep): Call + initialize_tdesc_i386_avx_mpx_linux. + * i386-linux-tdep.h (tdesc_i386_avx_mpx_linux): New include. + * i386-tdep.c (features/i386/i386-avx-mpx.c): New include. + (i386_target_description): Add case for X86_XSTATE_AVX_MPX_MASK. + * x86-linux-nat.c (x86_linux_read_description): Add case for + X86_XSTATE_AVX_MPX_MASK. + * features/i386/amd64-avx-mpx-linux.xml: New file. + * features/i386/i386-avx-mpx-linux.xml: New file. + * features/i386/i386-avx-mpx.xml: New file. + * features/i386/amd64-avx-mpx.xml: New file. + * features/i386/amd64-avx-mpx-linux.c: Generated. + * features/i386/amd64-avx-mpx.c: Generated. + * features/i386/i386-avx-mpx-linux.c: Generated. + * features/i386/i386-avx-mpx.c: Generated. + * regformats/i386/amd64-avx-mpx-linux.dat: Generated. + * regformats/i386/amd64-avx-mpx.dat: Generated. + * regformats/i386/i386-avx-mpx-linux.dat: Generated. + * regformats/i386/i386-avx-mpx.dat: Generated. + +2016-04-18 Pedro Alves + + * ptrace.m4 (GDB_AC_PTRACE): Don't run tests in C++ mode. + * configure: Regenerate. + +2016-04-18 Martin Galvan + + * valops.c (value_addr): For C++ references, set the copied value's + enclosing_type as well. + +2016-04-18 Yao Qi + + Revert: + 2016-04-15 Yao Qi + + * arm-tdep.c (thumb_stack_frame_destroyed_p): Return zero if + PC is far from the end of function. + +2016-04-16 Pedro Alves + + * ada-exp.y (yydefred): Define as ada_yydefred. + +2016-04-15 Pedro Alves + + * ada-lang.c (ada_lookup_struct_elt_type): Constify 'type_str' and + 'name_str' locals. + +2016-04-15 Pedro Alves + + * btrace.c (pt_btrace_insn_flags): Change return type to + btrace_insn_flags. Use btrace_insn_flags for local. + 2016-04-15 Pedro Alves * nat/linux-ptrace.h [__mips__] (GDB_ARCH_IS_TRAP_BRKPT): Also accept TRAP_BRKPT. [__mips__] (GDB_ARCH_IS_TRAP_HWBKPT): Also accept TRAP_HWBKPT. -2016-04-15 Pedro Alves +2016-04-15 Yao Qi - * linux-nat.c (save_sigtrap) Delete. - (stop_wait_callback): Call save_stop_reason instead of - save_sigtrap. - (check_stopped_by_breakpoint): Rename to ... - (save_stop_reason): ... this. Bits of save_sigtrap folded here. - Use GDB_ARCH_IS_TRAP_HWBKPT and handle ambiguous - GDB_ARCH_IS_TRAP_BRKPT / GDB_ARCH_IS_TRAP_HWBKPT. Factor out - common code between the USE_SIGTRAP_SIGINFO and - !USE_SIGTRAP_SIGINFO blocks. - (linux_nat_filter_event): Call save_stop_reason instead of - save_sigtrap. - * nat/linux-ptrace.h: Check for both SI_KERNEL and TRAP_BRKPT - si_code for MIPS. - * nat/linux-ptrace.h: Fix "TRAP_HWBPT" typo in x86 table. Add - comments on MIPS behavior. - (GDB_ARCH_IS_TRAP_HWBKPT): Define for all archs. + * arm-tdep.c (thumb_stack_frame_destroyed_p): Return zero if + PC is far from the end of function. + +2016-04-14 Pedro Alves + + * cli/cli-cmds.c (alias_usage_error): New function. + (alias_command): Use it. + * ctf.c (ctf_save_metadata_header): Inline metadata_fmt local in + ctf_save_write_metadata call. + +2016-04-14 Pedro Alves + + * ada-typeprint.c (print_fixed_point_type): Don't pass float as + argument to function expecting LONGEST. + * value.c (unpack_long): Add casts to LONGEST. + +2016-04-13 Luis Machado + + * exec.c (exec_file_locate_attach): Guard a couple functions + that can throw errors. + (exception_print_same): New helper function. 2016-04-13 Pedro Alves @@ -106,6 +3118,439 @@ (init_remote_ops): Install it as to_execution_direction target_ops method. +2016-04-12 Pedro Alves + + * common/common-exceptions.h (GDB_XCPT_TRY): Update comment. + [__cplusplus] (GDB_XCPT): Define as GDB_XCPT_TRY. + +2016-04-12 Pedro Alves + + * common/common-exceptions.c (struct catcher) : Now a + 'jmp_buf' instead of SIGJMP_BUF. + (exceptions_state_mc_init): Change return type to 'jmp_buf'. + (throw_exception): Use longjmp instead of SIGLONGJMP. + * common/common-exceptions.h: Include instead of + "gdb_setjmp.h". + (exceptions_state_mc_init): Change return type to 'jmp_buf'. + [GDB_XCPT == GDB_XCPT_SJMP] (TRY): Use setjmp instead of + SIGSETJMP. + * cp-support.c: Include "gdb_setjmp.h". + +2016-04-12 Pedro Alves + + * common/common-exceptions.c (exception_rethrow): Remove + prepare_to_throw_exception call. + * common/common-exceptions.h (prepare_to_throw_exception): Delete + declaration. + * exceptions.c (prepare_to_throw_exception): Delete. + +2016-04-12 Pedro Alves + + * target.c (target_check_pending_interrupt): Delete. + * target.h (struct target_ops) : + Remove method. + (target_check_pending_interrupt): Remove declaration. + * target-delegates.c: Regenerate. + +2016-04-12 Pedro Alves + + * defs.h: Update comments on SIGINT handling. + (immediate_quit): Delete declaration. + * event-loop.c (call_async_signal_handler): Delete. + * event-loop.h (call_async_signal_handler): Delete declaration. + (mark_async_signal_handler): Update comments. + (gdb_call_async_signal_handler): Delete declaration. + * event-top.c (handle_sigint): Call mark_async_signal_handler + instead of gdb_call_async_signal_handler. + * exceptions.c (prepare_to_throw_exception): Remove reference to + immediate_quit. + (exception_fprintf): Remove comments about immediate_quit. + * mingw-hdep.c (sigint_event, sigint_handler): Delete. + (gdb_select): Don't wait on sigint_event. + (gdb_call_async_signal_handler): Delete. + (_initialize_mingw_hdep): Delete. + * posix-hdep.c (gdb_call_async_signal_handler): Delete. + * utils.c (immediate_quit): Delete. + +2016-04-12 Pedro Alves + + * defs.h (quit_handler_ftype, quit_handler) + (make_cleanup_override_quit_handler, default_quit_handler): New. + (QUIT): Adjust comments. + * event-top.c (default_quit_handler): New function. + (quit_handler): New global. + (struct quit_handler_cleanup_data): New. + (restore_quit_handler, restore_quit_handler_dtor) + (make_cleanup_override_quit_handler): New. + (async_request_quit): Call QUIT. + * remote.c (struct remote_state) : New field. + (async_sigint_remote_twice_token, async_sigint_remote_token): + Delete. + (remote_close): Update comments. + (remote_start_remote): Don't set immediate_quit. Set starting_up + earlier. + (remote_serial_quit_handler, remote_unpush_and_throw): New + functions. + (remote_open_1): Clear got_ctrlc_during_io. Set + remote_async_terminal_ours_p unconditionally. + (async_initialize_sigint_signal_handler) + (async_handle_remote_sigint, async_handle_remote_sigint_twice) + (remote_check_pending_interrupt, async_remote_interrupt) + (async_remote_interrupt_twice) + (async_cleanup_sigint_signal_handler, ofunc) + (sync_remote_interrupt, sync_remote_interrupt_twice): Delete. + (remote_terminal_inferior, remote_terminal_ours): Remove async + checks. + (remote_wait_as): Don't install a SIGINT handler in sync mode. + (readchar, remote_serial_write): Override the quit handler with + remote_serial_quit_handler. + (getpkt_or_notif_sane_1): Don't call QUIT. + (initialize_remote_ops): Don't install + remote_check_pending_interrupt. + (_initialize_remote): Don't create async_sigint_remote_token and + async_sigint_remote_twice_token. + * ser-base.c (ser_base_wait_for): Call QUIT and use + interruptible_select. + (ser_base_write): Call QUIT. + * ser-go32.c (dos_readchar, dos_write): Call QUIT. + * ser-unix.c (wait_for): Don't use VTIME. Always take the + gdb_select path, but call QUIT and interruptible_select. + * utils.c (maybe_quit): Call the current quit handler. Don't call + target_check_pending_interrupt. + (defaulted_query, prompt_for_continue): Override the quit handler + with the default quit handler. + +2016-04-12 Pedro Alves + + * tui/tui-hooks.c (tui_target_has_run): Delete. + (tui_about_to_proceed): Delete. + (tui_about_to_proceed_observer): Delete. + (tui_install_hooks, tui_remove_hooks): Don't install/remove an + about_to_proceed observer. + +2016-04-12 Pedro Alves + + * mi/mi-interp.c (mi_new_thread): Put + target_terminal_ours_for_output in effect while outputting. + (mi_thread_exit): Use target_terminal_ours_for_output instead of + target_terminal_ours. + (mi_record_changed, mi_inferior_added, mi_inferior_appeared) + (mi_inferior_exit, mi_inferior_removed, mi_traceframe_changed) + (mi_tsv_created, mi_tsv_deleted, mi_tsv_modified) + (mi_breakpoint_created, mi_breakpoint_deleted) + (mi_breakpoint_modified, mi_solib_loaded, mi_solib_unloaded) + (mi_command_param_changed, mi_memory_changed) + (report_initial_inferior): Use target_terminal_ours_for_output + instead of target_terminal_ours. Restore terminal settings. + * mi/mi-main.c (mi_execute_command): Use + target_terminal_ours_for_output instead of target_terminal_ours. + Restore terminal settings. + +2016-04-12 Pedro Alves + + PR gdb/19828 + * gnu-nat.c (inf_validate_task_sc): Don't call + target_terminal_ours / target_terminal_inferior around query. + * i386-tdep.c (i386_record_lea_modrm, i386_process_record): Don't + call target_terminal_ours / target_terminal_inferior around + yquery. + * linux-record.c (record_linux_system_call): Don't call + target_terminal_ours / target_terminal_inferior around yquery. + * nto-procfs.c (interrupt_query): Don't call target_terminal_ours + / target_terminal_inferior around query. + * record-full.c (record_full_check_insn_num): Remove + 'set_terminal' parameter. Don't call target_terminal_ours / + target_terminal_inferior around query. + (record_full_message, record_full_registers_change) + (record_full_xfer_partial): Adjust. + * remote.c (interrupt_query): Don't call target_terminal_ours / + target_terminal_inferior around query. + * utils.c (defaulted_query): Install cleanup to restore target + terminal. Put target_terminal_ours_for_output in effect while + defaulted producing, and target_terminal_ours in in effect while + handling input. + (prompt_for_continue): Install cleanup to restore target terminal. + Put target_terminal_ours in in effect while handling input. + +2016-04-12 Pedro Alves + + * utils.c (defaulted_query, prompt_for_continue): Free temporary + strings with cleanups, instead of xfree. + +2016-04-12 Pedro Alves + + * utils.c (vwarning, internal_vproblem): Use + make_cleanup_restore_target_terminal and + target_terminal_ours_for_output. + +2016-04-12 Pedro Alves + + * infcmd.c (post_create_inferior, prepare_one_step): Use + target_terminal_ours_for_output instead of target_terminal_ours. + +2016-04-12 Pedro Alves + + * exceptions.c (print_flush): Use target_terminal_ours_for_output + instead of target_terminal_ours, and restore target terminal with + a cleanup. + +2016-04-12 Pedro Alves + + * cp-support.c (gdb_demangle): Use target_terminal_ours_for_output + instead of target_terminal_ours, and restore target terminal with + a cleanup. + +2016-04-12 Pedro Alves + + * ada-lang.c (type_as_string, type_as_string_and_cleanup): New + functions. + (ada_lookup_struct_elt_type): Use type_as_string_and_cleanup. + +2016-04-12 Pedro Alves + + * ser-base.c (fd_event): Retry read_prim on EINTR. + (do_ser_base_readchar): Retry read_prim on EINTR. + (ser_base_write): Retry write_prim on EINTR. + * ser-unix.c (ser_unix_read_prim): Don't retry on EINTR here. + (ser_unix_write_prim): Remove comment. + +2016-04-12 Pedro Alves + + * remote.c (remote_pass_ctrlc): New function. + (init_remote_ops): Install it. + * target.c (target_terminal_inferior): Pass pending Ctrl-C to the + target. + (target_pass_ctrlc, default_target_pass_ctrlc): New functions. + * target.h (struct target_ops) : New method. + (target_pass_ctrlc, default_target_pass_ctrlc): New declarations. + * target-delegates.c: Regenerate. + +2016-04-12 Pedro Alves + + * infcmd.c (interrupt_target_1): Call target_stop is in non-stop + mode. + * linux-nat.c (linux_nat_interrupt): Delete. + (linux_nat_add_target): Don't install linux_nat_interrupt. + * remote.c (remote_interrupt_ns): Change return type to void. + Throw error if interrupting the target is not supported. + (remote_interrupt): Don't call the remote_stop_ns/remote_stop_as. + +2016-04-12 Pedro Alves + + * defs.h (clear_quit_flag): Remove declaration. + * extension-priv.h (struct extension_language_ops) + : Remove field and update comments. + * extension.c (clear_quit_flag): Delete. + * guile/guile.c (guile_extension_ops): Adjust. + * python/python.c (python_extension_ops): Adjust. + (gdbpy_clear_quit_flag): Delete. + +2016-04-12 Pedro Alves + + * main.c (captured_main): Don't clear the quit flag. + +2016-04-12 Pedro Alves + + * exceptions.c (prepare_to_throw_exception): Don't clear the quit + flag. + +2016-04-12 Pedro Alves + + * event-top.c (command_handler): Don't call clear_quit_flag. + +2016-04-12 Pedro Alves + + * remote-sim.c (gdb_os_poll_quit): Don't call clear_quit_flag. + * remote.c (remote_wait_as): Don't call clear_quit_flag. + +2016-04-12 Pedro Alves + + * python/python.c: Include "ser-event.h". + (gdbpy_event_fds): Delete. + (gdbpy_serial_event): New. + (gdbpy_run_events): Change prototype. Use serial_event_clear + instead of serial_readchar. + (gdbpy_post_event): Use serial_event_set instead of serial_write. + (gdbpy_initialize_events): Use make_serial_event instead of + serial_pipe. + +2016-04-12 Pedro Alves + + * defs.h: Extend QUIT-related comments to mention + interruptible_select. + (quit_serial_event_set, quit_serial_event_clear): Declare. + * event-top.c: Include "ser-event.h" and "gdb_select.h". + (quit_serial_event): New global. + (async_init_signals): Make quit_serial_event. + (quit_serial_event_set, quit_serial_event_clear) + (quit_serial_event_fd, interruptible_select): New functions. + * extension.c (set_quit_flag): Set the quit serial event. + (check_quit_flag): Clear the quit serial event. + * gdb_select.h (interruptible_select): New declaration. + * guile/scm-ports.c (ioscm_input_waiting): Use + interruptible_select instead of gdb_select. + * top.c (gdb_readline_no_editing): Likewise. + * ui-file.c (stdio_file_read): Likewise. + +2016-04-12 Pedro Alves + + * event-loop.c: Include "ser-event.h". + (async_signal_handlers_serial_event): New global. + (async_signals_handler, initialize_async_signal_handlers): New + functions. + (mark_async_signal_handler): Set + async_signal_handlers_serial_event. + (invoke_async_signal_handlers): Clear + async_signal_handlers_serial_event. + * event-top.c (async_init_signals): Call + initialize_async_signal_handlers. + +2016-04-12 Pedro Alves + + * Makefile.in (SFILES): Add ser-event.c. + (HFILES_NO_SRCDIR): Add ser-event.h. + (COMMON_OBS): Add ser-event.o. + * ser-event.c, ser-event.h: New files. + * serial.c (new_serial): New function, factored out from + (serial_fdopen_ops): ... this. + (serial_open_ops_1): New function, factored out from + (serial_open): ... this. + (serial_open_ops): New function. + * serial.h (struct serial): Forware declare. + (serial_open_ops): New declaration. + +2016-04-12 Pedro Alves + + * serial.c (serial_open, serial_fdopen_ops, do_serial_close): + Remove references to name. + * serial.h (struct serial) : Delete. + +2016-04-12 Pedro Alves + + * remote-fileio.c (sigint_fileio_token, remote_fio_no_longjmp): + Delete. + (async_remote_fileio_interrupt): Delete. + (remote_fileio_ctrl_c_signal_handler): Don't call the async signal + handler. Instead just always set the ctrl_c flag. + (remote_fileio_reply): Clear remote_fio_ctrl_c_flag before + re-enabling the SIGINT handler. + (remote_fileio_func_open, remote_fileio_func_close) + (remote_fileio_func_read, remote_fileio_func_write) + (remote_fileio_func_lseek, remote_fileio_func_rename) + (remote_fileio_func_unlink, remote_fileio_func_stat) + (remote_fileio_func_fstat, remote_fileio_func_gettimeofday) + (remote_fileio_func_isatty, remote_fileio_func_system) + (remote_fileio_request): Remove references to + remote_fio_no_longjmp. + (initialize_remote_fileio): Don't create an async signal handler. + +2016-04-12 Pedro Alves + + * event-top.c (stdin_event_handler): Call QUIT; + (prompt_for_continue): Don't run with immediate_quit set. + +2016-04-12 Pedro Alves + + * tui/tui-io.c (tui_redisplay_readline): Check + gdb_in_secondary_prompt_p instead of immediate_quit. + * tui/tui.c: Include top.h. + (tui_rl_startup_hook): Check gdb_in_secondary_prompt_p instead of + immediate_quit. + +2016-04-12 Pedro Alves + + * top.c (read_command_file): Inline command_loop here. + (command_loop): Delete. + +2016-04-12 Pedro Alves + + * top.c: Include "gdb_select.h". + (gdb_readline_no_editing): Wait for input with gdb_select instead + of blocking in fgetc. + (command_line_input): Don't set immediate_quit. + +2016-04-08 Martin Galvan + + * value.c (value_next): Make pass-by-reference parameters const-correct. + (value_parent): Likewise. + (value_enclosing_type): Likewise. + (value_lazy): Likewise. + (value_stack): Likewise. + (value_embedded_offset): Likewise. + (value_pointed_to_offset): Likewise. + (value_raw_address): Likewise. + (deprecated_value_modifiable): Likewise. + (value_free_to_mark): Likewise. + (value_release_to_mark): Likewise. + (internalvar_name): Likewise. + (readjust_indirect_value_type): Likewise. + (value_initialized): Likewise. + * value.h (value_next): Likewise. + (value_parent): Likewise. + (value_enclosing_type): Likewise. + (value_lazy): Likewise. + (value_stack): Likewise. + (value_embedded_offset): Likewise. + (value_pointed_to_offset): Likewise. + (value_raw_address): Likewise. + (deprecated_value_modifiable): Likewise. + (value_free_to_mark): Likewise. + (value_release_to_mark): Likewise. + (internalvar_name): Likewise. + (readjust_indirect_value_type): Likewise. + (value_initialized): Likewise. + +2016-04-07 Yao Qi + + * record-full.c (record_full_insert_breakpoint): Return + early if entry on the address is found in + record_full_breakpoints. + +2016-04-07 Yao Qi + + * record-full.c (record_full_insert_breakpoint): Set + bp_tgt->reqstd_address and bp_tgt->placed_size. + +2016-04-06 Don Breazeal + + * value.c (value_actual_type): Don't try to get rtti type + of the value if it has been optimized out. + (value_optimized_out): If a memory access error occurs, + just check vaue->optimized_out. + +2016-04-06 Jan Kratochvil + + Revert the previous commit adding unknown_v_replies_ok. + +2016-04-06 Jan Kratochvil + + * remote.c (struct remote_state): New field unknown_v_replies_ok. + (packet_config_support): Read it. + (remote_start_remote): Set it. + +2016-04-06 Jan Kratochvil + + * remote.c: Revert check-in by a mistake in the previous commit. + +2016-04-06 Jan Kratochvil + Pedro Alves + + * exec.c (exec_file_locate_attach): Print warning for unsupported + target_pid_to_exec_file. + * symfile-mem.c (add_vsyscall_page): Remove the "file" command + message part. + +2016-04-04 Simon Marchi + + * cli/cli-decode.c (help_cmd_list): Fix function doc and remove + trailing spaces. + +2016-04-01 Artemiy Volkov + + PR gdb/19820 + * eval.c (evaluate_subexp_standard): Allow TYPE_CODE_ENUM to be + the type of BINOP_REPEAT's second operand. + 2016-03-31 Yichao Yu PR gdb/19858 @@ -115,21 +3560,277 @@ (_initialize_jit): Install jit_inferior_created as inferior_created observer. -2016-03-17 Markus Metzger +2016-03-31 Marcin Kościelnicki - PR gdb/19829 - * frame.h (skip_tailcall_frames): New. - * infcmd.c (finish_command): Call skip_tailcall_frames. - * frame.c (skip_artificial_frames): Return NULL if only artificial - frames are found. Update comment. - (frame_pop): Call skip_tailcall_frames. - (frame_unwind_caller_id): Handle NULL return. - (frame_unwind_caller_pc, frame_unwind_caller_arch): Assert that - skip_artificial_frames does not return NULL. - (frame_pop): Add an error if only tailcall frames are found. - * infcmd.c (finish_command): Move skip_tailcall_frames call into - forward-execution case. Add an error if only tailcall frames are found. - * stack.c (frame_info): Check frame_unwind_caller_id. + * NEWS: Mention support for tracepoints on powerpc*-linux. + +2016-03-31 Catalin Udma + + PR python/19743 + * python/python.c (execute_gdb_command): Use console uiout + when executing gdb command. + * utils.c (restore_ui_out_closure): New structure. + (do_restore_ui_out): New function. + (make_cleanup_restore_ui_out): Likewise. + * utils.h (make_cleanup_restore_ui_out): Declare. + +2016-03-31 Pedro Alves + + * NEWS: Mention that support for "target m32rsdi", "target mips", + "target pmon", "target ddb", "target rockhopper", and "target lsi" + was removed. + * Makefile.in (ALL_TARGET_OBS): Remove remote-m32r-sdi.o and + remote-mips.o. + (ALLDEPFILES): Remove remote-m32r-sdi.c and remote-mips.c. + * configure.tgt: Remove all references to remote-m32r-sdi.o and + remote-mips.o. + * mips-tdep.c (deprecated_mips_set_processor_regs_hack): Delete + function. + * mips-tdep.h (deprecated_mips_set_processor_regs_hack): Delete + declaration. + * remote-m32r-sdi.c, remote-mips.c: Delete files. + * symfile.c (generic_load, generic_load): Remove comments. + +2016-03-30 Yao Qi + + * arm-tdep.c (arm_epilogue_frame_this_id): Check 'func' against + 0 rather than NULL. + +2016-03-30 Yao Qi + + * arm-tdep.c: (arm_make_epilogue_frame_cache): New function. + (arm_epilogue_frame_this_id): New function. + (arm_epilogue_frame_prev_register): New function. + (arm_epilogue_frame_sniffer): New function. + (arm_epilogue_frame_unwind): New. + (arm_gdbarch_init): Append unwinder arm_epilogue_frame_unwind. + +2016-03-30 Yao Qi + + * arm-tdep.c (arm_stack_frame_destroyed_p): Rename it ... + (arm_stack_frame_destroyed_p_1): ... here. Don't call + arm_pc_is_thumb. + (arm_stack_frame_destroyed_p): Call + thumb_stack_frame_destroyed_p and + arm_stack_frame_destroyed_p_1. + +2016-03-30 Doug Evans + + * python/py-utils.c (host_string_to_python_string): New function. + * python/python-internal.h (host_string_to_python_string): Declare it. + * python/py-*.c (*): Update all calls to + PyString_Decode (str, strlen (str), host_charset (), NULL); + to use host_string_to_python_string instead. + +2016-03-30 Marcin Kościelnicki + + * remote.c (remote_check_symbols): Allocate own buffer for reply. + +2016-03-29 Max Filippov + + * xtensa-tdep.c (xtensa_frame_cache): Change op1 type to LONGEST. + Use safe_read_memory_integer instead of read_memory_integer. + +2016-03-29 Marcin Kościelnicki + + * NEWS: Mention support for tracepoints on s390*-linux. + +2016-03-29 Don Breazeal + + * gdb/value.c (value_actual_type): Fix formatting issue. + +2016-03-23 Yao Qi + + * gdbarch.sh (software_single_step): Remove comments. + * gdbarch.h: Regenerated. + +2016-03-21 Yao Qi + + * arm-tdep.c (arm_record_media): New. + (arm_record_ld_st_reg_offset): Call arm_record_media. + +2016-03-21 Yao Qi + + * arm-linux-tdep.c (arm_canonicalize_syscall): Canonicalize + more syscalls. + +2016-03-18 Yao Qi + + * sparc-tdep.c (sparc_software_single_step): Make it static. + * sparc-tdep.h (sparc_software_single_step): Remove declaration. + +2016-03-18 Yao Qi + + * spu-tdep.c (spu_software_single_step): Throw error when + target_read_memory fails. + +2016-03-17 Jan Kratochvil + + * linux-thread-db.c (check_pid_namespace_match): Extend the message. + +2016-03-17 Pedro Alves + Don Breazeal + + PR remote/19496 + * infcmd.c (notice_new_inferior): Use the 'leave_running' argument + instead of checking the 'non_stop' global. + * remote.c (remote_add_thread): New parameter 'executing'. Use it + to set the new thread's executing state. + (remote_notice_new_inferior): Rename parameter 'running' to + 'executing'. Always set the thread state to THREAD_RUNNING in + non-stop mode, and to THREAD_STOPPED in all-stop mode. Pass + EXECUTING to remote_add_thread and notice_new_inferior. + (remote_update_thread_list): Update to pass executing state, not + running state. + +2016-03-17 Andreas Arnez + + * syscalls/s390-linux.xml: Add NUMA syscalls and new syscalls up + to 374. + * syscalls/s390x-linux.xml: Likewise. + +2016-03-17 Andreas Arnez + + * linux-record.c (record_mem_at_reg): New helper function. + (record_linux_system_call): Exploit new helper function where + applicable. + +2016-03-17 Andreas Arnez + + * linux-record.c: Fix whitespace issues; tabify, remove trailing + spaces. + +2016-03-17 Andreas Arnez + + * linux-record.c (record_linux_system_call): Add missing return + statements to handling of pipe and pipe2 syscalls. + +2016-03-16 Doug Evans + + * xml-tdesc.c (tdesc_start_enum): Fix c++ build. + +2016-03-16 Yao Qi + + * arm-linux-tdep.c (arm_linux_init_abi): Fix + arm_linux_record_tdep.arg1, arm_linux_record_tdep.arg2 and + arm_linux_record_tdep.arg3. Set arm_linux_record_tdep.arg4, + arm_linux_record_tdep.arg5, arm_linux_record_tdep.arg6, and + arm_linux_record_tdep.arg7. + +2016-03-15 Keith Seitz + + PR breakpoints/18303 + * cp-namespace.c (cp_lookup_bare_symbol): Change assertion to + look for "::" instead of simply ":". + (cp_search_static_and_baseclasses): Return null_block_symbol for + malformed input. + Remove assertions. + * cp-support.c (cp_find_first_component_aux): Do not return + a prefix length for ':' unless the next character is also ':'. + +2016-03-15 Doug Evans + + * features/aarch64-core.xml (cpsr_flags): New flags type. + (cpsr): Use it. + * features/aarch64.c: Regenerate. + +2016-03-15 Doug Evans + + * features/i386/32bit-core.xml (i386_eflags): Remove "end" spec. + * features/i386/32bit-sse.xml (i386_eflags): Ditto. + * features/i386/64bit-core.xml (i386_eflags): Ditto. + * features/i386/64bit-sse.xml (i386_eflags): Ditto. + * features/i386/x32-core.xml (i386_eflags): Ditto. + +2016-03-15 Doug Evans + Wei-cheng Wang + + Extend flags to support multibit and enum bitfields. + * NEWS: Document new features. + * c-typeprint.c (c_type_print_varspec_prefix): Handle TYPE_CODE_FLAGS. + (c_type_print_varspec_suffix, c_type_print_base): Ditto. + * gdbtypes.c (arch_flags_type): Don't assume all fields are one bit. + (append_flags_type_field): New function. + (append_flags_type_flag): Call it. + * gdbtypes.h (append_flags_type_field): Declare. + * target-descriptions.c (struct tdesc_type_flag): Delete. + (enum tdesc_type_kind) : New enum value. + (enum tdesc_type_kind) : Ditto. + (struct tdesc_type) : Delete. + (tdesc_predefined_types): Add "bool". + (tdesc_predefined_type): New function. + (tdesc_gdb_type): Handle TDESC_TYPE_BOOL, TDESC_TYPE_ENUM. + Update TDESC_TYPE_FLAGS support. + (tdesc_free_type): Handle TDESC_TYPE_ENUM. Update TDESC_TYPE_FLAGS. + (tdesc_create_flags): Update. + (tdesc_create_enum): New function. + (tdesc_add_field): Initialize start,end to -1. + (tdesc_add_typed_bitfield): New function. + (tdesc_add_bitfield): Call it. + (tdesc_add_flag): Allow TDESC_TYPE_STRUCT. Update. + (tdesc_add_enum_value): New function. + (maint_print_c_tdesc_cmd): Fold TDESC_TYPE_FLAGS support into + TDESC_TYPE_STRUCT. Handle TDESC_TYPE_ENUM. + * target-descriptions.h (tdesc_create_enum): Declare. + (tdesc_add_typed_bitfield, tdesc_add_enum_value): Declare. + * valprint.c (generic_val_print_enum_1): New function. + (generic_val_print_enum): Call it. + (val_print_type_code_flags): Make static. Handle multibit bitfields + and enum bitfields. + * valprint.h (val_print_type_code_flags): Delete. + * xml-tdesc.c (struct tdesc_parsing_data) : + Delete. All uses removed. + (tdesc_start_enum): New function. + (tdesc_start_field): Handle multibit and enum bitfields. + (tdesc_start_enum_value): New function. + (enum_value_attributes, enum_children, enum_attributes): New static + globals. + (feature_children): Add "enum". + * features/gdb-target.dtd (enum, evalue): New elements. + +2016-03-15 Doug Evans + + * target-descriptions.c (struct tdesc_type) : Change type + from LONGEST to int. + (struct tdesc_type) : Ditto. + (tdesc_set_struct_size): Change type of "size" arg from LONGEST + to int. Add assertion size > 0. + (tdesc_create_flags): Ditto. + * target-descriptions.h (tdesc_set_struct_size): Update. + (tdesc_create_flags): Update. + * xml-tdesc.c (MAX_FIELD_SIZE, MAX_FIELD_BITSIZE): New macros. + (MAX_VECTOR_SIZE): New macro. + (tdesc_start_struct): Catch conversion errors from LONGEST to int. + (tdesc_start_flags, tdesc_start_field, tdesc_start_vector): Ditto. + +2016-03-15 Doug Evans + + * target-descriptions.c (maint_print_c_tdesc_cmd): Use "type" for + TYPE_CODE_FLAGS instead of "field_type", for consistency. + * features/i386/amd64-avx-linux.c: Regenerate. + * features/i386/amd64-avx.c: Regenerate. + * features/i386/amd64-avx512-linux.c: Regenerate. + * features/i386/amd64-avx512.c: Regenerate. + * features/i386/amd64-linux.c: Regenerate. + * features/i386/amd64-mpx-linux.c: Regenerate. + * features/i386/amd64-mpx.c: Regenerate. + * features/i386/amd64.c: Regenerate. + * features/i386/i386-avx-linux.c: Regenerate. + * features/i386/i386-avx.c: Regenerate. + * features/i386/i386-avx512-linux.c: Regenerate. + * features/i386/i386-avx512.c: Regenerate. + * features/i386/i386-linux.c: Regenerate. + * features/i386/i386-mmx-linux.c: Regenerate. + * features/i386/i386-mmx.c: Regenerate. + * features/i386/i386-mpx-linux.c: Regenerate. + * features/i386/i386-mpx.c: Regenerate. + * features/i386/i386.c: Regenerate. + * features/i386/x32-avx-linux.c: Regenerate. + * features/i386/x32-avx.c: Regenerate. + * features/i386/x32-avx512-linux.c: Regenerate. + * features/i386/x32-avx512.c: Regenerate. + * features/i386/x32-linux.c: Regenerate. + * features/i386/x32.c: Regenerate. 2016-03-15 Pedro Alves @@ -149,22 +3850,412 @@ * linux-tdep.c (linux_displaced_step_location): If reading auxv fails, throw NOT_SUPPORTED_ERROR instead of generic error. -2016-02-24 Joel Brobecker +2016-03-13 Marcin Kościelnicki - * version.in: Set GDB version number to 7.11.0.DATE-git. + * s390-linux-tdep.c (s390_gen_return_address): New function. + (s390_gdbarch_init): Fill gen_return_address hook. -2016-02-24 Joel Brobecker +2016-03-11 Andrew Burgess - GDB 7.11 released. + * symmisc.c (maintenance_info_line_tables): New function. + (maintenance_print_one_line_table): New function. + (_initialize_symmisc): Register 'maint info line-table' command. + * NEWS: Mention new command. + +2016-03-11 Marcin Kościelnicki + + * s390-linux-tdep.c (s390_ax_pseudo_register_collect): New function. + (s390_ax_pseudo_register_push_stack): New function. + (s390_gdbarch_init): Fill ax_pseudo_register_collect and + ax_pseudo_register_push_stack hooks. + +2016-03-10 Simon Marchi + + * data-directory/Makefile.in (PYTHON_FILE_LIST): Install + gdb/function/as_string.py. + * python/lib/gdb/function/as_string.py: New file. + * NEWS: Mention the new $_as_string function. + +2016-03-09 Jose E. Marchesi + + * target.h: Fix doc string of target_can_use_hardware_watchpoint. + +2016-03-09 Pedro Alves + + * event-top.c (more_to_come): Delete. + (struct readline_input_state): Delete. + (readline_input_state): Delete. + (get_command_line_buffer): New function. + (command_handler): Update comments. Don't handle NULL commands + here. Do not execute commented lines. + (command_line_append_input_line): New function. + (handle_line_of_input): New function, partly based on + command_line_handler and command_line_input. + (command_line_handler): Rewrite. + * event-top.h (command_handler): New declaration. + (command_loop): Defer command execution to command_handler. + (command_line_input): Update comments. Simplify, using struct + buffer and handle_line_of_input. + * top.h (struct buffer): New forward declaration. + (handle_line_of_input): New declaration. + +2016-03-09 Pedro Alves + + * event-top.c (command_line_handler): Use xfree + xstrdup instead + of xrealloc + strcpy. + * main.c (captured_main): Use xstrdup instead of xmalloc plus + manual clear. + * top.c (saved_command_line): Rewrite comment. + (saved_command_line_size): Delete. + (command_line_input): Use xfree + xstrdup instead of xrealloc + + strcpy. + * top.h (saved_command_line_size): Delete declaration. + +2016-03-09 Pedro Alves + + * event-top.c: Include buffer.h. + (gdb_readline_no_editing_callback): Use struct buffer instead + of xrealloc. + +2016-03-09 Pedro Alves + + * common/buffer.h (buffer_grow_char): New function. + * top.c: Include buffer.h. + (gdb_readline_no_editing): Rename 'prompt_arg' parameter to + 'prompt'. Use struct buffer instead of xrealloc. + +2016-03-09 Pedro Alves + + * defs.h (gdb_readline): Delete declaration. + * top.c (gdb_readline): Rename to ... + (gdb_readline_no_editing): ... this, and make static. + +2016-03-09 Pedro Alves + + * utils.c (prompt_for_continue): Update comments. + +2016-03-09 Pedro Alves + + * event-top.c (async_annotation_suffix): Delete. + (top_level_prompt, command_line_handler): Don't use + 'async_annotation_suffix' and simplify. + * event-top.h (async_annotation_suffix): Delete declaration. + (init_main): Remove reference to 'async_annotation_suffix'. + +2016-03-09 Pedro Alves + + * event-top.c (gdb_readline2): Rename to ... + (gdb_readline_no_editing_callback): ... this. + (change_line_handler, stdin_event_handler) + (gdb_setup_readline): Adjust. + * event-top.h (gdb_readline2): Rename to ... + (gdb_readline_no_editing_callback): ... this, and move closer to + other readline-related declarations. + * mi/mi-interp.c (mi_interpreter_resume): Adjust. + +2016-03-09 Pedro Alves + + * top.c (window_hook): Delete. + (command_loop): Remove references to window_hook. + +2016-03-09 Marcin Kościelnicki + + * corefile.c (safe_read_memory_unsigned_integer): New function. + * gdbcore.h (safe_read_memory_unsigned_integer): New prototype. + * rs6000-tdep.c (rs6000_frame_cache): Read backchain as unsigned. + +2016-03-09 Marcin Kościelnicki + + * rs6000-tdep.c: Add "ax.h" and "ax-gdb.h" includes. + (rs6000_gen_return_address): New function. + (rs6000_gdbarch_init): Wire in the above. + +2016-03-09 Marcin Kościelnicki + + * rs6000-tdep.c (rs6000_ax_pseudo_register_collect): New function. + (rs6000_gdbarch_init): Wire in the above. + +2016-03-09 Andreas Arnez + + * s390-linux-tdep.c (s390_analyze_prologue): Ignore BRC and BRCL + instructions that do nothing or are conditional traps. + +2016-03-09 Andreas Arnez + + * s390-linux-tdep.c (s390_prologue_frame_unwind_cache): Store + frame func's PC in info->func before any other failure can occur. + (s390_frame_this_id): Use frame_id_build_unavailable_stack if + info->func has been filled out. + +2016-03-09 Pedro Alves + + * osabi.c (gdb_osabi_names): Avoid spaces in osabi names. + +2016-03-09 Pedro Alves + + * frv-tdep.c (frv_gdbarch_init): Handle bfd_mach_fr300. + +2016-03-09 Pedro Alves + + * cris-tdep.c (cris_gdbarch_init): Return 0 if the info's byte + order is BFD_ENDIAN_BIG or if the cris version is unsupported. + +2016-03-09 Pedro Alves + + * doublest.c: Extend comments. + (floatformat_to_doublest, floatformat_from_doublest): Copy the + floatformat's total size, not the host type's size. + +2016-03-09 Pedro Alves + + * doublest.c (floatformat_totalsize_bytes): New function. + (floatformat_from_type): Assert that the type's length is at least + as long as the floatformat's totalsize. + * doublest.h (floatformat_totalsize_bytes): New declaration. + * gdbtypes.c (arch_float_type): Assert that the type's length is + at least as long as the floatformat's totalsize. + +2016-03-09 Pedro Alves + + * hppa-linux-tdep.c (hppa_linux_init_abi): Set the long double + format to floatformats_ieee_double. + +2016-03-07 Pedro Alves + + * mips-tdep.c (mips_gdbarch_init): Check whether info.abfd is NULL + before calling bfd_get_flavour. + +2016-03-05 Pitchumani Sivanupandi + + * avr-tdep.c (AVR_LAST_ARG_REGNUM): Define. + (avr_push_dummy_call): Correct last needed argument register. + Write MSB of argument into register and subsequent bytes into + other registers in decreasing order. + +2016-03-04 Yao Qi + + * arm-tdep.c (arm_record_vdata_transfer_insn): Simplify the + condition check. Record the right D register number. + +2016-03-04 Yao Qi + + * arm-tdep.c (arm_record_extension_space): Remove code + printing "Process record does not support". + (arm_record_data_proc_misc_ld_str): Likewise. + (decode_insn): Call arm_record_extension_space if condition + is 0xf. Call arm_record_unsupported_insn if ret isn't + ARM_RECORD_SUCCESS. Use 'ret' instead of 'insn_id' to hold + the value of thumb2_record_decode_insn_handler. + +2016-03-04 Simon Marchi + + * features/feature_to_c.sh: Print the help when passing no + argument. + +2016-03-02 Bernhard Heckel + + * MAINTAINERS (Write After Approval): Add Bernhard Heckel. + +2016-03-02 Bernhard Heckel + + * dwarf2read.c (new_symbol_full): Fix detection of gfortran compilers. + +2016-03-01 Andreas Arnez + + * s390-linux-tdep.c (s390_backchain_frame_unwind_cache): Avoid + exception when attempting to access the inferior's backchain. + +2016-02-29 Yao Qi + + * aarch64-linux-tdep.c (aarch64_canonicalize_syscall): Support + eventfd2, eventfd2, dup3, inotify_init1, fallocate and pipe2. + Return gdb_sys_epoll_create1 instead of gdb_sys_epoll_create + for aarch64_sys_epoll_create1. + +2016-02-29 Yao Qi + + * linux-record.h (enum gdb_syscall) : New. + : New. + : New. + * linux-record.c (record_linux_system_call): Handle them. + +2016-02-28 Iain Buclaw + + * d-namespace.c (d_lookup_symbol_imports): Avoid recursive lookups from + cyclic imports. + +2016-02-26 Keith Seitz + + * rs6000-tdep.c (rs6000_frame_cache): Explicitly cast return result + to avoid invalid conversion from void *. + +2016-02-26 Yao Qi + + * arm-tdep.c (arm_record_exreg_ld_st_insn): Set 'single_reg' + per bit 8. Check bit 20 instead of bit 4 for VMOV + instruction. Record D registers for instructions changing + S registers. Change of the order of length and address + in record_buf_mem array. + +2016-02-26 Yao Qi + + * arm-tdep.c (thumb_record_ld_st_reg_offset): Fix the register + number of Rd. + +2016-02-25 Doug Evans + + * remote-m32r-sdi.c (recv_char_data): Initialize val to avoid + compiler warning. + (recv_long_data): Ditto. + +2016-02-25 Simon Marchi + + * i386-linux-tdep.c (i386_linux_handle_segmentation_fault): + Initialize variables. + +2016-02-25 Antoine Tremblay + + * ax-general.c (ax_reg): Call gdbarch_remote_register_number. + (ax_reg_mask): Likewise. + +2016-02-24 Pedro Alves + + * linux-nat.c (save_sigtrap) Delete. + (stop_wait_callback): Call save_stop_reason instead of + save_sigtrap. + (check_stopped_by_breakpoint): Rename to ... + (save_stop_reason): ... this. Bits of save_sigtrap folded here. + Use GDB_ARCH_IS_TRAP_HWBKPT and handle ambiguous + GDB_ARCH_IS_TRAP_BRKPT / GDB_ARCH_IS_TRAP_HWBKPT. Factor out + common code between the USE_SIGTRAP_SIGINFO and + !USE_SIGTRAP_SIGINFO blocks. + (linux_nat_filter_event): Call save_stop_reason instead of + save_sigtrap. + * nat/linux-ptrace.h: Check for both SI_KERNEL and TRAP_BRKPT + si_code for MIPS. + * nat/linux-ptrace.h: Fix "TRAP_HWBPT" typo in x86 table. Add + comments on MIPS behavior. + (GDB_ARCH_IS_TRAP_HWBKPT): Define for all archs. + +2016-02-24 Marcin Kościelnicki + + * rs6000-tdep.c (rs6000_frame_cache): Initialize frame and pc to 0 + to avoid spurious warnings. + +2016-02-24 Gary Benson + + * exec.c (exec_file_locate_attach): Do not attempt to + locate main executable locally if not found in sysroot. 2016-02-24 Joel Brobecker - * version.in: Set GDB version number to 7.11. + GDB 7.11 released. + +2016-02-24 Wei-cheng Wang + + * rs6000-tdep.c (rs6000_frame_cache, rs6000_frame_this_id): Handle + unavailable PC/SP to build unavailable frame. + +2016-02-23 Doug Evans + + Extend "skip" command to support -file, -gfile, -function, -rfunction. + * NEWS: Document new features. + * skip.c: #include "fnmatch.h", "gdb_regex.h". + (skiplist_entry) : Renamed from filename. + : Renamed from function_name. + : New members. + : + New members. + (make_skip_entry): New function. + (free_skiplist_entry, free_skiplist_entry_cleanup): New functions. + (make_free_skiplist_entry_cleanup): New function. + (skip_file_command): Update. + (skip_function, skip_function_command): Update. + (compile_skip_regexp): New functions. + (skip_command): Add support for new options. + (skip_info): Update. + (skip_file_p, skip_gfile_p): New functions. + (skip_function_p, skip_rfunction_p): New functions. + (function_name_is_marked_for_skip): Update and simplify. + (_initialize_step_skip): Update. + * symtab.c: #include "fnmatch.h". + (compare_glob_filenames_for_search): New function. + * symtab.h (compare_glob_filenames_for_search): Declare. + * utils.c (count_path_elements): New function. + (strip_leading_path_elements): New function. + * utils.h (count_path_elements): Declare. + (strip_leading_path_elements): Declare. + +2016-02-23 Simon Marchi + + * arm-tdep.c (arm_decode_svc_copro): Remove "to" parameter. + (thumb_process_displaced_insn): Likewise. + (arm_process_displaced_insn): Adjust calls. + +2016-02-23 Yao Qi + + * aarch64-linux-tdep.c (enum aarch64_syscall) : + Remove. + : Remove. + : Remove. + : New. + : New. + : New. + : New. + : Remove. + : New. + : New. + (UNSUPPORTED_SYSCALL_MAP): New macro. + (aarch64_canonicalize_syscall): Add missing syscalls. 2016-02-22 Jan Kratochvil * gdb-gdb.py (class TypeFlagsPrinter): Use parentheses for print. +2016-02-22 Yao Qi + + * arm-tdep.c: Fix code format issues. + +2016-02-21 Iain Buclaw + + * d-namespace.c (d_lookup_symbol_imports): Remove argument + 'search_parents'. All callers updated. + +2016-02-18 Marcin Kościelnicki + + * s390-linux-tdep.c (s390_guess_tracepoint_registers): New function. + (s390_gdbarch_init): Fill guess_tracepoint_registers hook. + +2016-02-18 Walfred Tedeschi + + * NEWS: Add entry for bound violation. + * amd64-linux-tdep.c (amd64_linux_init_abi_common): + Add handler for segmentation fault. + * gdbarch.sh (handle_segmentation_fault): New. + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * i386-linux-tdep.c (i386_linux_handle_segmentation_fault): New. + (SIG_CODE_BONDARY_FAULT): New define. + (i386_linux_init_abi): Use i386_mpx_bound_violation_handler. + * i386-linux-tdep.h (i386_linux_handle_segmentation_fault) New. + * i386-tdep.c (i386_mpx_enabled): Add as external. + * i386-tdep.c (i386_mpx_enabled): Add as external. + * infrun.c (handle_segmentation_fault): New function. + (print_signal_received_reason): Use handle_segmentation_fault. + +2016-02-18 Marcin Kościelnicki + + * arch-utils.c (default_guess_tracepoint_registers): New function. + * arch-utils.h (default_guess_tracepoint_registers): New prototype. + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh: Add guess_tracepoint_registers hook. + * tracefile.c (tracefile_fetch_registers): Use the new gdbarch hook. + +2016-02-17 Gary Benson + + * exec.c (exec_file_locate_attach): Add missing cleanup. + 2016-02-16 Don Breazeal PR remote/19496 @@ -176,31 +4267,183 @@ * arm-linux-tdep.c (arm_linux_software_single_step): Assign 'old_chain' later. -2016-02-10 Joel Brobecker +2016-02-16 Yao Qi - * version.in: Replace -cvs suffix by -git suffix. + * arch/arm-get-next-pcs.h (struct arm_get_next_pcs_ops) + : Remove argument PC. Callers updated. + * arm-linux-tdep.c (arm_linux_get_next_pcs_syscall_next_pc): + Remove argument PC. Get pc from regcache_read_pc. + * arm-tdep.c (arm_get_next_pcs_syscall_next_pc): Remove + argument PC. -2016-02-10 Joel Brobecker +2016-02-15 Yao Qi - * version.in: Set GDB version number to 7.10.90.DATE-cvs. + * aarch64-tdep.c (aarch64_analyze_prologue): Remove "0x". -2016-02-10 Joel Brobecker +2016-02-12 Yao Qi - GDB 7.10.90 released. + * arch/arm-linux.c (arm_linux_get_next_pcs_fixup): Calculate + nextpc according to instruction. -2016-02-10 Joel Brobecker +2016-02-12 Yao Qi + + * arch/arm-get-next-pcs.c (arm_get_next_pcs): Call + self->ops->fixup if it isn't NULL. + * arch/arm-get-next-pcs.h: Include gdb_vecs.h. + (struct arm_get_next_pcs_ops) : New field. + * arch/arm-linux.c: Include common-regcache.h and + arch/arm-get-next-pcs.h. + (arm_linux_get_next_pcs_fixup): New function. + * arch/arm-linux.h (arm_linux_get_next_pcs_fixup): Declare. + * arm-linux-tdep.c (arm_linux_get_next_pcs_ops): Initialize + it with arm_linux_get_next_pcs_fixup. + (arm_linux_software_single_step): Move code to + arm_linux_get_next_pcs_fixup. + * arm-tdep.c (arm_get_next_pcs_ops): Initialize it. + +2016-02-12 Marcin Kościelnicki + + * xml-tdesc.c (target_fetch_description_xml) [!HAVE_LIBEXPAT]: Warn + and return NULL. + +2016-02-12 Markus Metzger + + * frame.h (skip_tailcall_frames): Update comment. + * frame.c (skip_artificial_frames, skip_tailcall_frames): Return NULL + if only artificial frames are found. Update comment. + (frame_unwind_caller_id): Handle NULL return. + (frame_unwind_caller_pc, frame_unwind_caller_arch): Assert that + skip_artificial_frames does not return NULL. + (frame_pop): Add an error if only tailcall frames are found. + * infcmd.c (finish_command): Move skip_tailcall_frames call into + forward-execution case. Add an error if only tailcall frames are + found. + +2016-02-12 Markus Metzger + + * stack.c (frame_info): Check frame_unwind_caller_id. + +2016-02-12 Markus Metzger + + * frame.h (skip_tailcall_frames): New. + * frame.c (skip_tailcall_frames): New. + (frame_pop): Call skip_tailcall_frames. + * infcmd.c (finish_command): Call skip_tailcall_frames. - * version.in: Set GDB version number to 7.10.90. +2016-02-11 Pedro Alves + + * Makefile.in (check-parallel): New rule. + +2016-02-11 Simon Marchi + + * arm-tdep.c (arm_skip_prologue): Remove unused variables. + (arm_analyze_prologue): Likewise. + (arm_scan_prologue): Likewise. + (arm_m_exception_prev_register): Likewise. + (arm_copy_block_xfer): Likewise. + (thumb2_copy_block_xfer): Likewise. + (arm_decode_miscellaneous): Likewise. + (arm_decode_ld_st_word_ubyte): Likewise. + (arm_decode_svc_copro): Likewise. + (thumb2_decode_svc_copro): Likewise. + (thumb_copy_16bit_ldr_literal): Likewise. + (thumb_copy_pop_pc_16bit): Likewise. + (decode_thumb_32bit_ld_mem_hints): Likewise. + (arm_show_force_mode): Likewise. + (_initialize_arm_tdep): Likewise. + (arm_record_strx): Likewise. + (arm_record_extension_space): Likewise. + (arm_record_data_proc_misc_ld_str): Likewise. + (arm_record_exreg_ld_st_insn): Likewise. + (arm_record_vfp_data_proc_insn): Likewise. + (arm_record_coproc_data_proc): Likewise. + (thumb_record_misc): Likewise. + (thumb_record_ldm_stm_swi): Likewise. + (thumb2_record_ld_st_dual_ex_tbb): Likewise. + (thumb2_record_ld_mem_hints): Likewise. + (thumb2_record_lmul_lmla_div): Likewise. + (thumb2_record_asimd_struct_ld_st): Likewise. + (arm_process_record): Likewise. + +2016-02-11 Simon Marchi + + * arm-tdep.c (arm_displaced_step_copy_insn): Remove. + (ARM displaced stepping support): Remove reference to + arm_displaced_step_copy_insn in comment. + * arm-tdep.h (arm_displaced_step_copy_insn): Remove. + * arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Remove + reference to arm_displaced_step_copy_insn in comment. + +2016-02-11 Simon Marchi + + * arm-tdep.c (thumb_copy_unmodified_16bit): Change type of insn. + (thumb_copy_b): Likewise. + (arm_decode_b_bl_ldmstm): Likewise. + (thumb_copy_16bit_ldr_literal): Likewise. + (thumb_copy_pop_pc_16bit): Likewise. + +2016-02-11 Antoine Tremblay + + * tracepoint.c (encode_actions_1): Use target_gdbarch () rather + than loc->gdbarch. + +2016-02-10 Marcin Kościelnicki + + * tracefile-tfile.c (trace_tdesc): New static variable. + (tfile_open): Clear trace_tdesc, call target_find_description. + (tfile_interp_line): Recognize tdesc lines. + (tfile_close): Clear trace_tdesc. + (tfile_xfer_partial_features): New function. + (tfile_xfer_partial): Call tfile_xfer_partial_features. + (tfile_append_tdesc_line): New function. + +2016-02-10 Marcin Kościelnicki + + * ctf.c (ctf_write_tdesc): New function. + (ctf_write_ops): Wire in ctf_write_tdesc. + * tracefile-tfile.c (tfile_write_tdesc): New function. + (tfile_write_ops): Wire in tfile_write_tdesc. + * tracefile.c (trace_save): Call write_tdesc method. + * tracefile.h (struct trace_file_write_ops): Add write_tdesc method. + * xml-tdesc.c (target_fetch_description_xml): New function. + * xml-tdesc.h: Add target_fetch_description_xml prototype. + +2016-02-10 Simon Marchi + + * arm-tdep.c (arm_copy_extra_ld_st): Fix "unpriveleged" typo. + (arm_decode_dp_misc): Likewise. + +2016-02-10 Marcin Kościelnicki + + * amd64-tdep.c (amd64_ax_pseudo_register_collect): New function. + (amd64_init_abi): Fill ax_pseudo_register_collect hook. + * gdb/i386-tdep.c (i386_pseudo_register_read_into_value): Remove + misleading comment. + (i386_pseudo_register_write): Ditto. + (i386_ax_pseudo_register_collect): New function. + (i386_gdbarch_init): Fill ax_pseudo_register_collect hook. + * i386-tdep.h: Add i386_ax_pseudo_register_collect prototype. + +2016-02-10 Marcin Kościelnicki + + * tracefile-tfile.c (tfile_fetch_registers): Use g packet order + instead of gdb order. + +2016-02-10 Marcin Kościelnicki + + * tracefile-tfile.c (tfile_fetch_registers): Fix off-by-one in bounds + check. 2016-02-10 Joel Brobecker - * NEWS: Change "Changes since GDB version 7.10" into "Changes - in GDB version 7.11". + * NEWS: Create a new section for the next release branch. + Rename the section of the current branch, now that it has + been cut. 2016-02-10 Joel Brobecker GDB 7.11 branch created (9ef9e6a6a0dd8f948708cb67c9afcfd0be40cb0a): - * version.in: Bump version to 7.10.90.DATE-git. + * version.in: Bump version to 7.11.50.DATE-git. 2016-02-09 Keith Seitz diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS index d06382b..f6446ef 100644 --- a/gdb/MAINTAINERS +++ b/gdb/MAINTAINERS @@ -354,7 +354,6 @@ resolving more generic problems. The host maintainer ensures that gdb can be built as a cross debugger on their platform. -AIX Joel Brobecker brobecker@adacore.com Darwin Tristan Gingold gingold@adacore.com djgpp native Eli Zaretskii eliz@gnu.org GNU Hurd Alfred M. Szmidt ams@gnu.org @@ -548,6 +547,7 @@ Matthew Gretton-Dann matthew.gretton-dann@arm.com Maxim Grigoriev maxim2405@gmail.com Jerome Guitton guitton@act-europe.fr Ben Harris bjh21@netbsd.org +Bernhard Heckel bernhard.heckel@intel.com Richard Henderson rth@redhat.com Aldy Hernandez aldyh@redhat.com Paul Hilfinger hilfinger@gnat.com @@ -569,6 +569,7 @@ Jeff Johnston jjohnstn@redhat.com Geoff Keating geoffk@redhat.com Mark Kettenis kettenis@gnu.org Marc Khouzam marc.khouzam@ericsson.com +Toshihito Kikuchi k.toshihito@yahoo.de Jim Kingdon kingdon@panix.com Paul Koning paul_koning@dell.com Marcin Kościelnicki koriakin@0x04.net @@ -580,6 +581,7 @@ Jeff Law law@redhat.com Justin Lebar justin.lebar@gmail.com David Lecomber david@streamline-computing.com Don Lee don.lee@sunplusct.com +Yan-Ting Lin currygt52@gmail.com Robert Lipe rjl@sco.com Lei Liu lei.liu2@windriver.com Sandra Loosemore sandra@codesourcery.com @@ -663,6 +665,7 @@ Jackie Smith Cashion jsmith@redhat.com Petr Sorfa petrs@caldera.com Andrew Stubbs ams@codesourcery.com Emi Suzuki emi-suzuki@tjsys.co.jp +David Taylor david.taylor@emc.com Ian Lance Taylor ian@airs.com Walfred Tedeschi walfred.tedeschi@intel.com Gary Thomas gthomas@redhat.com @@ -684,6 +687,7 @@ Kris Warkentin kewarken@qnx.com Philippe Waroquiers philippe.waroquiers@skynet.be Ulrich Weigand uweigand@de.ibm.com Ken Werner ken.werner@de.ibm.com +Tim Wiederhake tim.wiederhake@intel.com Mark Wielaard mjw@redhat.com Nathan Williams nathanw@wasabisystems.com Bob Wilson bob.wilson@acm.org diff --git a/gdb/Makefile.in b/gdb/Makefile.in index ec2af52..7b2df86 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -691,6 +691,7 @@ ALL_TARGET_OBS = \ moxie-tdep.o \ msp430-tdep.o \ mt-tdep.o \ + nds32-tdep.o \ nios2-tdep.o nios2-linux-tdep.o \ nto-tdep.o \ ppc-linux-tdep.o ppcfbsd-tdep.o ppcnbsd-tdep.o ppcobsd-tdep.o \ @@ -716,7 +717,6 @@ ALL_TARGET_OBS = \ sol2-tdep.o \ solib-frv.o solib-svr4.o \ solib-darwin.o solib-dsbt.o \ - remote-m32r-sdi.o remote-mips.o \ xcoffread.o \ symfile-mem.o \ windows-tdep.o \ @@ -870,8 +870,9 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \ proc-service.list progspace.c \ prologue-value.c psymtab.c \ regcache.c reggroups.c remote.c remote-fileio.c remote-notif.c reverse.c \ - sentinel-frame.c \ - serial.c ser-base.c ser-unix.c skip.c \ + rust-exp.y rust-lang.c \ + selftest.c sentinel-frame.c \ + serial.c ser-base.c ser-unix.c ser-event.c skip.c \ solib.c solib-target.c source.c \ stabsread.c stack.c probe.c stap-probe.c std-regs.c \ symfile.c symfile-debug.c symfile-mem.c symmisc.c symtab.c \ @@ -896,6 +897,7 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \ target/waitstatus.c common/print-utils.c common/rsp-low.c \ common/errors.c common/common-debug.c common/common-exceptions.c \ common/btrace-common.c common/fileio.c common/common-regcache.c \ + common/signals-state-save-restore.c \ $(SUBDIR_GCC_COMPILE_SRCS) LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c @@ -911,7 +913,7 @@ common/gdb_signals.h nat/gdb_thread_db.h common/gdb_vecs.h \ common/x86-xstate.h nat/linux-ptrace.h nat/mips-linux-watch.h \ proc-utils.h aarch64-tdep.h arm-tdep.h ax-gdb.h ppcfbsd-tdep.h \ ppcnbsd-tdep.h cli-out.h gdb_expat.h breakpoint.h infcall.h obsd-tdep.h \ -exec.h m32r-tdep.h osabi.h gdbcore.h amd64bsd-nat.h \ +exec.h m32r-tdep.h osabi.h gdbcore.h x86bsd-nat.h \ i386bsd-nat.h xml-support.h xml-tdesc.h alphabsd-tdep.h gdb_obstack.h \ ia64-tdep.h ada-lang.h varobj.h varobj-iter.h frv-tdep.h \ nto-tdep.h serial.h \ @@ -967,7 +969,7 @@ amd64-darwin-tdep.h charset-list.h \ config/djgpp/langinfo.h config/djgpp/nl_types.h darwin-nat.h \ dicos-tdep.h filesystem.h gcore.h gdb_wchar.h hppabsd-tdep.h \ i386-darwin-tdep.h x86-nat.h linux-record.h moxie-tdep.h nios2-tdep.h \ -ft32-tdep.h \ +ft32-tdep.h nds32-tdep.h \ osdata.h procfs.h python/py-event.h python/py-events.h python/py-stopevent.h \ python/python-internal.h python/python.h ravenscar-thread.h record.h \ record-full.h solib-aix.h \ @@ -988,7 +990,8 @@ common/common-exceptions.h target/target.h common/symbol.h \ common/common-regcache.h fbsd-tdep.h nat/linux-personality.h \ common/fileio.h nat/x86-linux.h nat/x86-linux-dregs.h nat/amd64-linux-siginfo.h\ nat/linux-namespaces.h arch/arm.h common/gdb_sys_time.h arch/aarch64-insn.h \ -tid-parse.h +tid-parse.h ser-event.h \ +common/signals-state-save-restore.h # Header files that already have srcdir in them, or which are in objdir. @@ -1048,6 +1051,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ build-id.o buildsym.o \ findcmd.o \ std-regs.o \ + signals-state-save-restore.o \ signals.o \ exec.o reverse.o \ bcache.o objfiles.o observer.o minsyms.o maint.o demangle.o \ @@ -1061,12 +1065,12 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ go-lang.o go-valprint.o go-typeprint.o \ jv-lang.o jv-valprint.o jv-typeprint.o jv-varobj.o \ m2-lang.o opencl-lang.o p-lang.o p-typeprint.o p-valprint.o \ - sentinel-frame.o \ + selftest.o sentinel-frame.o \ complaints.o typeprint.o \ ada-typeprint.o c-typeprint.o f-typeprint.o m2-typeprint.o \ ada-valprint.o c-valprint.o cp-valprint.o d-valprint.o f-valprint.o \ m2-valprint.o \ - serial.o mdebugread.o top.o utils.o \ + ser-event.o serial.o mdebugread.o top.o utils.o \ ui-file.o \ user-regs.o \ frame.o frame-unwind.o doublest.o \ @@ -1075,6 +1079,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ gnu-v2-abi.o gnu-v3-abi.o cp-abi.o cp-support.o \ cp-namespace.o d-namespace.o \ reggroups.o \ + rust-lang.o \ trad-frame.o \ tramp-frame.o \ solib.o solib-target.o \ @@ -1107,12 +1112,12 @@ YYFILES = c-exp.c \ ada-lex.c \ ada-exp.c \ jv-exp.c \ - d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c + d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c rust-exp.c YYOBJ = c-exp.o \ cp-name-parser.o \ ada-exp.o \ jv-exp.o \ - d-exp.o f-exp.o go-exp.o m2-exp.o p-exp.o + d-exp.o f-exp.o go-exp.o m2-exp.o p-exp.o rust-exp.o # Things which need to be built when making a distribution. @@ -1158,6 +1163,14 @@ check-read1: force $(MAKE) $(TARGET_FLAGS_TO_PASS) check-read1; \ else true; fi +check-parallel: force + @if [ -f testsuite/Makefile ]; then \ + rootme=`pwd`; export rootme; \ + rootsrc=`cd $(srcdir); pwd`; export rootsrc; \ + cd testsuite; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check-parallel; \ + else true; fi + # The idea is to parallelize testing of multilibs, for example: # make -j3 check//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu} # will run 3 concurrent sessions of check, eventually testing all 10 @@ -1353,6 +1366,7 @@ init.c: $(INIT_FILES) -e '/version.[co]$$/d' \ -e '/^[a-z0-9A-Z_]*_[SU].[co]$$/d' \ -e '/[a-z0-9A-Z_]*-exp.tab.[co]$$/d' \ + -e 's/-exp\.o$$/-exp.y/' \ -e 's/\.[co]$$/.c/' \ -e 's,signals\.c,common/signals\.c,' \ -e 's|^\([^ /][^ ]*\)|$(srcdir)/\1|g' | \ @@ -1475,7 +1489,7 @@ local-maintainer-clean: cp-name-parser.c \ ada-lex.c ada-exp.c \ jv-exp.tab \ - d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c + d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c rust-exp.c rm -f TAGS $(INFOFILES) rm -f $(YYFILES) rm -f nm.h config.status @@ -1716,6 +1730,7 @@ ALLDEPFILES = \ mipsnbsd-nat.c mipsnbsd-tdep.c \ mips64obsd-nat.c mips64obsd-tdep.c \ msp430-tdep.c \ + nds32-tdep.c \ nios2-tdep.c nios2-linux-tdep.c \ nbsd-nat.c nbsd-tdep.c obsd-nat.c obsd-tdep.c \ posix-hdep.c common/posix-strerror.c \ @@ -1725,7 +1740,6 @@ ALLDEPFILES = \ ppcobsd-nat.c ppcobsd-tdep.c \ procfs.c \ ravenscar-thread.c \ - remote-m32r-sdi.c remote-mips.c \ remote-sim.c \ dcache.c \ rl78-tdep.c \ @@ -2275,6 +2289,10 @@ common-regcache.o: ${srcdir}/common/common-regcache.c $(COMPILE) $(srcdir)/common/common-regcache.c $(POSTCOMPILE) +signals-state-save-restore.o: $(srcdir)/common/signals-state-save-restore.c + $(COMPILE) $(srcdir)/common/signals-state-save-restore.c + $(POSTCOMPILE) + # # gdb/target/ dependencies # diff --git a/gdb/NEWS b/gdb/NEWS index a568367..b0b7fd6 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -1,6 +1,147 @@ What has changed in GDB? (Organized release by release) +*** Changes in GDB 7.12 + +* GDB and GDBserver now build with a C++ compiler by default. + + The --enable-build-with-cxx configure option is now enabled by + default. One must now explicitly configure with + --disable-build-with-cxx in order to build with a C compiler. This + option will be removed in a future release. + +* GDBserver now supports recording btrace without maintaining an active + GDB connection. + +* GDB now supports a negative repeat count in the 'x' command to examine + memory backward from the given address. For example: + + (gdb) bt + #0 Func1 (n=42, p=0x40061c "hogehoge") at main.cpp:4 + #1 0x400580 in main (argc=1, argv=0x7fffffffe5c8) at main.cpp:8 + (gdb) x/-5i 0x0000000000400580 + 0x40056a : mov %edi,-0x4(%rbp) + 0x40056d : mov %rsi,-0x10(%rbp) + 0x400571 : mov $0x40061c,%esi + 0x400576 : mov $0x2a,%edi + 0x40057b : + callq 0x400536 + +* Fortran: Support structures with fields of dynamic types and + arrays of dynamic types. + +* GDB now supports multibit bitfields and enums in target register + descriptions. + +* New Python-based convenience function $_as_string(val), which returns + the textual representation of a value. This function is especially + useful to obtain the text label of an enum value. + +* Intel MPX bound violation handling. + + Segmentation faults caused by a Intel MPX boundary violation + now display the kind of violation (upper or lower), the memory + address accessed and the memory bounds, along with the usual + signal received and code location. + + For example: + + Program received signal SIGSEGV, Segmentation fault + Upper bound violation while accessing address 0x7fffffffc3b3 + Bounds: [lower = 0x7fffffffc390, upper = 0x7fffffffc3a3] + 0x0000000000400d7c in upper () at i386-mpx-sigsegv.c:68 + +* Rust language support. + GDB now supports debugging programs written in the Rust programming + language. See https://www.rust-lang.org/ for more information about + Rust. + +* Support for running interpreters on specified input/output devices + + GDB now supports a new mechanism that allows frontends to provide + fully featured GDB console views, as a better alternative to + building such views on top of the "-interpreter-exec console" + command. See the new "new-ui" command below. With that command, + frontends can now start GDB in the traditional command-line mode + running in an embedded terminal emulator widget, and create a + separate MI interpreter running on a specified i/o device. In this + way, GDB handles line editing, history, tab completion, etc. in the + console all by itself, and the GUI uses the separate MI interpreter + for its own control and synchronization, invisible to the command + line. + +* The "catch syscall" command catches groups of related syscalls. + + The "catch syscall" command now supports catching a group of related + syscalls using the 'group:' or 'g:' prefix. + +* New commands + +skip -file file +skip -gfile file-glob-pattern +skip -function function +skip -rfunction regular-expression + A generalized form of the skip command, with new support for + glob-style file names and regular expressions for function names. + Additionally, a file spec and a function spec may now be combined. + +maint info line-table REGEXP + Display the contents of GDB's internal line table data struture. + +maint selftest + Run any GDB unit tests that were compiled in. + +new-ui INTERP TTY + Start a new user interface instance running INTERP as interpreter, + using the TTY file for input/output. + +* Python Scripting + + ** gdb.Breakpoint objects have a new attribute "pending", which + indicates whether the breakpoint is pending. + ** Three new breakpoint-related events have been added: + gdb.breakpoint_created, gdb.breakpoint_modified, and + gdb.breakpoint_deleted. + +signal-event EVENTID + Signal ("set") the given MS-Windows event object. This is used in + conjunction with the Windows JIT debugging (AeDebug) support, where + the OS suspends a crashing process until a debugger can attach to + it. Resuming the crashing process, in order to debug it, is done by + signalling an event. + +* Support for tracepoints and fast tracepoints on s390-linux and s390x-linux + was added in GDBserver, including JIT compiling fast tracepoint's + conditional expression bytecode into native code. + +* Support for various remote target protocols and ROM monitors has + been removed: + + target m32rsdi Remote M32R debugging over SDI + target mips MIPS remote debugging protocol + target pmon PMON ROM monitor + target ddb NEC's DDB variant of PMON for Vr4300 + target rockhopper NEC RockHopper variant of PMON + target lsi LSI variant of PMO + +* Support for tracepoints and fast tracepoints on powerpc-linux, + powerpc64-linux, and powerpc64le-linux was added in GDBserver, + including JIT compiling fast tracepoint's conditional expression + bytecode into native code. + +* MI async record =record-started now includes the method and format used for + recording. For example: + + =record-started,thread-group="i1",method="btrace",format="bts" + +* MI async record =thread-selected now includes the frame field. For example: + + =thread-selected,id="3",frame={level="0",addr="0x00000000004007c0"} + +* New targets + +Andes NDS32 nds32*-*-elf + *** Changes in GDB 7.11 * GDB now supports debugging kernel-based threads on FreeBSD. @@ -180,15 +321,13 @@ QThreadEvents stop for that same thread. N stop reply - Indicates that there are no resumed threads left in the target (all threads are stopped). The remote stub reports support for this stop reply to GDB's qSupported query. -QCatchSyscalls:1 [;SYSNO]... -QCatchSyscalls:0 - Enable ("QCatchSyscalls:1") or disable ("QCatchSyscalls:0") - catching syscalls from the inferior process. +QCatchSyscalls + Enables/disables catching syscalls from the inferior process. + The remote stub reports support for this packet to GDB's qSupported query. syscall_entry stop reason Indicates that a syscall was just called. @@ -196,10 +335,6 @@ syscall_entry stop reason syscall_return stop reason Indicates that a syscall just returned. -QCatchSyscalls:1 in qSupported - The qSupported packet may now include QCatchSyscalls:1 in the reply - to indicate support for catching syscalls. - * Extended-remote exec events ** GDB now has support for exec events on extended-remote Linux targets. diff --git a/gdb/aarch32-linux-nat.c b/gdb/aarch32-linux-nat.c index 5d9babf..2df672d 100644 --- a/gdb/aarch32-linux-nat.c +++ b/gdb/aarch32-linux-nat.c @@ -20,6 +20,7 @@ #include "regcache.h" #include "arm-tdep.h" #include "arm-linux-tdep.h" +#include "arch/arm-linux.h" #include "aarch32-linux-nat.h" @@ -36,7 +37,11 @@ aarch32_gp_regcache_supply (struct regcache *regcache, uint32_t *regs, regcache_raw_supply (regcache, regno, ®s[regno]); if (arm_apcs_32) - regcache_raw_supply (regcache, ARM_PS_REGNUM, ®s[ARM_CPSR_GREGNUM]); + { + /* Clear reserved bits bit 20 to bit 23. */ + regs[ARM_CPSR_GREGNUM] &= 0xff0fffff; + regcache_raw_supply (regcache, ARM_PS_REGNUM, ®s[ARM_CPSR_GREGNUM]); + } else regcache_raw_supply (regcache, ARM_PS_REGNUM, ®s[ARM_PC_REGNUM]); @@ -62,8 +67,15 @@ aarch32_gp_regcache_collect (const struct regcache *regcache, uint32_t *regs, if (arm_apcs_32 && REG_VALID == regcache_register_status (regcache, ARM_PS_REGNUM)) - regcache_raw_collect (regcache, ARM_PS_REGNUM, - ®s[ARM_CPSR_GREGNUM]); + { + uint32_t cpsr = regs[ARM_CPSR_GREGNUM]; + + regcache_raw_collect (regcache, ARM_PS_REGNUM, + ®s[ARM_CPSR_GREGNUM]); + /* Keep reserved bits bit 20 to bit 23. */ + regs[ARM_CPSR_GREGNUM] = ((regs[ARM_CPSR_GREGNUM] & 0xff0fffff) + | (cpsr & 0x00f00000)); + } } /* Supply VFP registers contents, stored in REGS, to REGCACHE. diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c index fe1631d..65ca8ff 100644 --- a/gdb/aarch64-linux-nat.c +++ b/gdb/aarch64-linux-nat.c @@ -457,7 +457,7 @@ aarch64_linux_new_fork (struct lwp_info *parent, pid_t child_pid) storage (or its descriptor). */ ps_err_e -ps_get_thread_area (const struct ps_prochandle *ph, +ps_get_thread_area (struct ps_prochandle *ph, lwpid_t lwpid, int idx, void **base) { int is_64bit_p @@ -481,7 +481,6 @@ aarch64_linux_child_post_startup_inferior (struct target_ops *self, super_post_startup_inferior (self, ptid); } -extern struct target_desc *tdesc_arm_with_vfpv3; extern struct target_desc *tdesc_arm_with_neon; /* Implement the "to_read_description" target_ops method. */ @@ -489,47 +488,20 @@ extern struct target_desc *tdesc_arm_with_neon; static const struct target_desc * aarch64_linux_read_description (struct target_ops *ops) { - CORE_ADDR at_phent; - - if (target_auxv_search (ops, AT_PHENT, &at_phent) == 1) - { - if (at_phent == sizeof (Elf64_External_Phdr)) - return tdesc_aarch64; - else - { - CORE_ADDR arm_hwcap = 0; - - if (target_auxv_search (ops, AT_HWCAP, &arm_hwcap) != 1) - return ops->beneath->to_read_description (ops->beneath); - -#ifndef COMPAT_HWCAP_VFP -#define COMPAT_HWCAP_VFP (1 << 6) -#endif -#ifndef COMPAT_HWCAP_NEON -#define COMPAT_HWCAP_NEON (1 << 12) -#endif -#ifndef COMPAT_HWCAP_VFPv3 -#define COMPAT_HWCAP_VFPv3 (1 << 13) -#endif - - if (arm_hwcap & COMPAT_HWCAP_VFP) - { - char *buf; - const struct target_desc *result = NULL; - - if (arm_hwcap & COMPAT_HWCAP_NEON) - result = tdesc_arm_with_neon; - else if (arm_hwcap & COMPAT_HWCAP_VFPv3) - result = tdesc_arm_with_vfpv3; + int ret, tid; + gdb_byte regbuf[VFP_REGS_SIZE]; + struct iovec iovec; - return result; - } + tid = ptid_get_lwp (inferior_ptid); - return NULL; - } - } + iovec.iov_base = regbuf; + iovec.iov_len = VFP_REGS_SIZE; - return tdesc_aarch64; + ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec); + if (ret == 0) + return tdesc_arm_with_neon; + else + return tdesc_aarch64; } /* Convert a native/host siginfo object, into/from the siginfo in the diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index 9d082e8..cd220a6 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -143,7 +143,6 @@ aarch64_linux_sigframe_init (const struct tramp_frame *self, struct trad_frame_cache *this_cache, CORE_ADDR func) { - struct gdbarch *gdbarch = get_frame_arch (this_frame); CORE_ADDR sp = get_frame_register_unsigned (this_frame, AARCH64_SP_REGNUM); CORE_ADDR sigcontext_addr = sp @@ -409,12 +408,12 @@ enum aarch64_syscall { aarch64_sys_ioprio_set = 30, aarch64_sys_ioprio_get = 31, aarch64_sys_flock = 32, - aarch64_sys_mknod = 33, - aarch64_sys_mkdir = 34, - aarch64_sys_unlink = 35, - aarch64_sys_symlink = 36, - aarch64_sys_link = 37, - aarch64_sys_rename = 38, + aarch64_sys_mknodat = 33, + aarch64_sys_mkdirat = 34, + aarch64_sys_unlinkat = 35, + aarch64_sys_symlinkat = 36, + aarch64_sys_linkat = 37, + aarch64_sys_renameat = 38, aarch64_sys_umount2 = 39, aarch64_sys_mount = 40, aarch64_sys_pivot_root = 41, @@ -424,7 +423,7 @@ enum aarch64_syscall { aarch64_sys_truncate = 45, aarch64_sys_ftruncate = 46, aarch64_sys_fallocate = 47, - aarch64_sys_faccess = 48, + aarch64_sys_faccessat = 48, aarch64_sys_chdir = 49, aarch64_sys_fchdir = 50, aarch64_sys_chroot = 51, @@ -432,7 +431,7 @@ enum aarch64_syscall { aarch64_sys_fchmodat = 53, aarch64_sys_fchownat = 54, aarch64_sys_fchown = 55, - aarch64_sys_open = 56, + aarch64_sys_openat = 56, aarch64_sys_close = 57, aarch64_sys_vhangup = 58, aarch64_sys_pipe2 = 59, @@ -454,8 +453,8 @@ enum aarch64_syscall { aarch64_sys_vmsplice = 75, aarch64_sys_splice = 76, aarch64_sys_tee = 77, - aarch64_sys_readlink = 78, - aarch64_sys_fstatat = 79, + aarch64_sys_readlinkat = 78, + aarch64_sys_newfstatat = 79, aarch64_sys_fstat = 80, aarch64_sys_sync = 81, aarch64_sys_fsync = 82, @@ -648,6 +647,9 @@ aarch64_canonicalize_syscall (enum aarch64_syscall syscall_number) #define SYSCALL_MAP(SYSCALL) case aarch64_sys_##SYSCALL: \ return gdb_sys_##SYSCALL +#define UNSUPPORTED_SYSCALL_MAP(SYSCALL) case aarch64_sys_##SYSCALL: \ + return gdb_sys_no_syscall + switch (syscall_number) { SYSCALL_MAP (io_setup); @@ -670,33 +672,45 @@ aarch64_canonicalize_syscall (enum aarch64_syscall syscall_number) SYSCALL_MAP (fremovexattr); SYSCALL_MAP (getcwd); SYSCALL_MAP (lookup_dcookie); - - case aarch64_sys_epoll_create1: - return gdb_sys_epoll_create; - + SYSCALL_MAP (eventfd2); + SYSCALL_MAP (epoll_create1); SYSCALL_MAP (epoll_ctl); SYSCALL_MAP (epoll_pwait); SYSCALL_MAP (dup); + SYSCALL_MAP (dup3); SYSCALL_MAP (fcntl); + SYSCALL_MAP (inotify_init1); SYSCALL_MAP (inotify_add_watch); SYSCALL_MAP (inotify_rm_watch); SYSCALL_MAP (ioctl); SYSCALL_MAP (ioprio_set); SYSCALL_MAP (ioprio_get); SYSCALL_MAP (flock); + SYSCALL_MAP (mknodat); + SYSCALL_MAP (mkdirat); + SYSCALL_MAP (unlinkat); + SYSCALL_MAP (symlinkat); + SYSCALL_MAP (linkat); + SYSCALL_MAP (renameat); + UNSUPPORTED_SYSCALL_MAP (umount2); SYSCALL_MAP (mount); + SYSCALL_MAP (pivot_root); SYSCALL_MAP (nfsservctl); SYSCALL_MAP (statfs); SYSCALL_MAP (truncate); SYSCALL_MAP (ftruncate); + SYSCALL_MAP (fallocate); + SYSCALL_MAP (faccessat); SYSCALL_MAP (fchdir); SYSCALL_MAP (chroot); SYSCALL_MAP (fchmod); SYSCALL_MAP (fchmodat); SYSCALL_MAP (fchownat); SYSCALL_MAP (fchown); + SYSCALL_MAP (openat); SYSCALL_MAP (close); SYSCALL_MAP (vhangup); + SYSCALL_MAP (pipe2); SYSCALL_MAP (quotactl); SYSCALL_MAP (getdents64); SYSCALL_MAP (lseek); @@ -706,17 +720,27 @@ aarch64_canonicalize_syscall (enum aarch64_syscall syscall_number) SYSCALL_MAP (writev); SYSCALL_MAP (pread64); SYSCALL_MAP (pwrite64); + UNSUPPORTED_SYSCALL_MAP (preadv); + UNSUPPORTED_SYSCALL_MAP (pwritev); SYSCALL_MAP (sendfile); SYSCALL_MAP (pselect6); SYSCALL_MAP (ppoll); + UNSUPPORTED_SYSCALL_MAP (signalfd4); SYSCALL_MAP (vmsplice); SYSCALL_MAP (splice); SYSCALL_MAP (tee); + SYSCALL_MAP (readlinkat); + SYSCALL_MAP (newfstatat); + SYSCALL_MAP (fstat); SYSCALL_MAP (sync); SYSCALL_MAP (fsync); SYSCALL_MAP (fdatasync); SYSCALL_MAP (sync_file_range); + UNSUPPORTED_SYSCALL_MAP (timerfd_create); + UNSUPPORTED_SYSCALL_MAP (timerfd_settime); + UNSUPPORTED_SYSCALL_MAP (timerfd_gettime); + UNSUPPORTED_SYSCALL_MAP (utimensat); SYSCALL_MAP (acct); SYSCALL_MAP (capget); SYSCALL_MAP (capset); @@ -796,6 +820,7 @@ aarch64_canonicalize_syscall (enum aarch64_syscall syscall_number) SYSCALL_MAP (getrusage); SYSCALL_MAP (umask); SYSCALL_MAP (prctl); + SYSCALL_MAP (getcpu); SYSCALL_MAP (gettimeofday); SYSCALL_MAP (settimeofday); SYSCALL_MAP (adjtimex); @@ -870,7 +895,28 @@ aarch64_canonicalize_syscall (enum aarch64_syscall syscall_number) SYSCALL_MAP (set_mempolicy); SYSCALL_MAP (migrate_pages); SYSCALL_MAP (move_pages); - + UNSUPPORTED_SYSCALL_MAP (rt_tgsigqueueinfo); + UNSUPPORTED_SYSCALL_MAP (perf_event_open); + UNSUPPORTED_SYSCALL_MAP (accept4); + UNSUPPORTED_SYSCALL_MAP (recvmmsg); + + SYSCALL_MAP (wait4); + + UNSUPPORTED_SYSCALL_MAP (prlimit64); + UNSUPPORTED_SYSCALL_MAP (fanotify_init); + UNSUPPORTED_SYSCALL_MAP (fanotify_mark); + UNSUPPORTED_SYSCALL_MAP (name_to_handle_at); + UNSUPPORTED_SYSCALL_MAP (open_by_handle_at); + UNSUPPORTED_SYSCALL_MAP (clock_adjtime); + UNSUPPORTED_SYSCALL_MAP (syncfs); + UNSUPPORTED_SYSCALL_MAP (setns); + UNSUPPORTED_SYSCALL_MAP (sendmmsg); + UNSUPPORTED_SYSCALL_MAP (process_vm_readv); + UNSUPPORTED_SYSCALL_MAP (process_vm_writev); + UNSUPPORTED_SYSCALL_MAP (kcmp); + UNSUPPORTED_SYSCALL_MAP (finit_module); + UNSUPPORTED_SYSCALL_MAP (sched_setattr); + UNSUPPORTED_SYSCALL_MAP (sched_getattr); default: return gdb_sys_no_syscall; } diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 798a1b7..3b7e954 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -299,7 +299,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch, if (aarch64_debug) { debug_printf ("aarch64: prologue analysis gave up " - "addr=0x%s opcode=0x%x (orr x register)\n", + "addr=%s opcode=0x%x (orr x register)\n", core_addr_to_string_nz (start), insn); } break; @@ -322,10 +322,11 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch, is64 ? 8 : 4, regs[rt]); } else if ((inst.opcode->iclass == ldstpair_off - || inst.opcode->iclass == ldstpair_indexed) - && inst.operands[2].addr.preind + || (inst.opcode->iclass == ldstpair_indexed + && inst.operands[2].addr.preind)) && strcmp ("stp", inst.opcode->name) == 0) { + /* STP with addressing mode Pre-indexed and Base register. */ unsigned rt1 = inst.operands[0].reg.regno; unsigned rt2 = inst.operands[1].reg.regno; unsigned rn = inst.operands[2].addr.base_regno; @@ -365,7 +366,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch, { if (aarch64_debug) { - debug_printf ("aarch64: prologue analysis gave up addr=0x%s" + debug_printf ("aarch64: prologue analysis gave up addr=%s" " opcode=0x%x\n", core_addr_to_string_nz (start), insn); } @@ -415,10 +416,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch, static CORE_ADDR aarch64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) { - unsigned long inst; - CORE_ADDR skip_pc; CORE_ADDR func_addr, limit_pc; - struct symtab_and_line sal; /* See if we can determine the end of the prologue via the symbol table. If so, then return either PC, or the PC after the @@ -488,9 +486,6 @@ aarch64_scan_prologue (struct frame_info *this_frame, else { CORE_ADDR frame_loc; - LONGEST saved_fp; - LONGEST saved_lr; - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); frame_loc = get_frame_register_unsigned (this_frame, AARCH64_FP_REGNUM); if (frame_loc == 0) @@ -612,7 +607,6 @@ static struct value * aarch64_prologue_prev_register (struct frame_info *this_frame, void **this_cache, int prev_regnum) { - struct gdbarch *gdbarch = get_frame_arch (this_frame); struct aarch64_prologue_cache *cache = aarch64_make_prologue_cache (this_frame, this_cache); @@ -816,7 +810,6 @@ static struct value * aarch64_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache, int regnum) { - struct gdbarch *gdbarch = get_frame_arch (this_frame); CORE_ADDR lr; switch (regnum) @@ -1061,7 +1054,6 @@ pass_in_v (struct gdbarch *gdbarch, { if (info->nsrn < 8) { - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int regnum = AARCH64_V0_REGNUM + info->nsrn; gdb_byte reg[V_REGISTER_SIZE]; @@ -1181,10 +1173,7 @@ aarch64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) { - int nstack = 0; int argnum; - int x_argreg; - int v_argreg; struct aarch64_call_info info; struct type *func_type; struct type *return_type; @@ -1584,8 +1573,6 @@ static const gdb_byte * aarch64_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr) { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - *lenptr = sizeof (aarch64_default_breakpoint); return aarch64_default_breakpoint; } @@ -1709,9 +1696,6 @@ aarch64_extract_return_value (struct type *type, struct regcache *regs, static int aarch64_return_in_memory (struct gdbarch *gdbarch, struct type *type) { - int nRc; - enum type_code code; - type = check_typedef (type); if (is_hfa_or_hva (type)) @@ -1843,7 +1827,6 @@ aarch64_return_value (struct gdbarch *gdbarch, struct value *func_value, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT || TYPE_CODE (valtype) == TYPE_CODE_UNION @@ -2340,7 +2323,7 @@ aarch64_displaced_step_b (const int is_bl, const int32_t offset, { struct aarch64_displaced_step_data *dsd = (struct aarch64_displaced_step_data *) data; - int32_t new_offset = data->insn_addr - dsd->new_addr + offset; + int64_t new_offset = data->insn_addr - dsd->new_addr + offset; if (can_encode_int32 (new_offset, 28)) { @@ -2374,7 +2357,6 @@ aarch64_displaced_step_b_cond (const unsigned cond, const int32_t offset, { struct aarch64_displaced_step_data *dsd = (struct aarch64_displaced_step_data *) data; - int32_t new_offset = data->insn_addr - dsd->new_addr + offset; /* GDB has to fix up PC after displaced step this instruction differently according to the condition is true or false. Instead @@ -2413,7 +2395,6 @@ aarch64_displaced_step_cb (const int32_t offset, const int is_cbnz, { struct aarch64_displaced_step_data *dsd = (struct aarch64_displaced_step_data *) data; - int32_t new_offset = data->insn_addr - dsd->new_addr + offset; /* The offset is out of range for a compare and branch instruction. We can use the following instructions instead: @@ -2438,7 +2419,6 @@ aarch64_displaced_step_tb (const int32_t offset, int is_tbnz, { struct aarch64_displaced_step_data *dsd = (struct aarch64_displaced_step_data *) data; - int32_t new_offset = data->insn_addr - dsd->new_addr + offset; /* The offset is out of range for a test bit and branch instruction We can use the following instructions instead: @@ -2662,7 +2642,6 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) struct tdesc_arch_data *tdesc_data = NULL; const struct target_desc *tdesc = info.target_desc; int i; - int have_fpa_registers = 1; int valid_p = 1; const struct tdesc_feature *feature; int num_regs = 0; @@ -3003,11 +2982,10 @@ aarch64_record_data_proc_reg (insn_decode_record *aarch64_insn_r) static unsigned int aarch64_record_data_proc_imm (insn_decode_record *aarch64_insn_r) { - uint8_t reg_rd, insn_bit28, insn_bit23, insn_bits24_27, setflags; + uint8_t reg_rd, insn_bit23, insn_bits24_27, setflags; uint32_t record_buf[4]; reg_rd = bits (aarch64_insn_r->aarch64_insn, 0, 4); - insn_bit28 = bit (aarch64_insn_r->aarch64_insn, 28); insn_bit23 = bit (aarch64_insn_r->aarch64_insn, 23); insn_bits24_27 = bits (aarch64_insn_r->aarch64_insn, 24, 27); @@ -3474,7 +3452,8 @@ aarch64_record_load_store (insn_decode_record *aarch64_insn_r) if (!ld_flag) { - uint64_t reg_rm_val; + ULONGEST reg_rm_val; + regcache_raw_read_unsigned (aarch64_insn_r->regcache, bits (aarch64_insn_r->aarch64_insn, 16, 20), ®_rm_val); if (bit (aarch64_insn_r->aarch64_insn, 12)) @@ -3761,7 +3740,6 @@ aarch64_process_record (struct gdbarch *gdbarch, struct regcache *regcache, uint32_t rec_no = 0; uint8_t insn_size = 4; uint32_t ret = 0; - ULONGEST t_bit = 0, insn_id = 0; gdb_byte buf[insn_size]; insn_decode_record aarch64_record; diff --git a/gdb/ada-exp.c b/gdb/ada-exp.c index 961d090..747fc35 100644 --- a/gdb/ada-exp.c +++ b/gdb/ada-exp.c @@ -80,61 +80,10 @@ #define parse_type(ps) builtin_type (parse_gdbarch (ps)) -/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), - as well as gratuitiously global symbol names, so we can have multiple - yacc generated parsers in gdb. These are only the variables - produced by yacc. If other parser generators (bison, byacc, etc) produce - additional global names that conflict at link time, then those parser - generators need to be fixed instead of adding those names to this list. */ - -/* NOTE: This is clumsy, especially since BISON and FLEX provide --prefix - options. I presume we are maintaining it to accommodate systems - without BISON? (PNH) */ - -#define yymaxdepth ada_maxdepth -/* ada_parse calls this after initialization */ -#define yyparse ada_parse_internal -#define yylex ada_lex -#define yyerror ada_error -#define yylval ada_lval -#define yychar ada_char -#define yydebug ada_debug -#define yypact ada_pact -#define yyr1 ada_r1 -#define yyr2 ada_r2 -#define yydef ada_def -#define yychk ada_chk -#define yypgo ada_pgo -#define yyact ada_act -#define yyexca ada_exca -#define yyerrflag ada_errflag -#define yynerrs ada_nerrs -#define yyps ada_ps -#define yypv ada_pv -#define yys ada_s -#define yy_yys ada_yys -#define yystate ada_state -#define yytmp ada_tmp -#define yyv ada_v -#define yy_yyv ada_yyv -#define yyval ada_val -#define yylloc ada_lloc -#define yyreds ada_reds /* With YYDEBUG defined */ -#define yytoks ada_toks /* With YYDEBUG defined */ -#define yyname ada_name /* With YYDEBUG defined */ -#define yyrule ada_rule /* With YYDEBUG defined */ -#define yyss ada_yyss -#define yysslim ada_yysslim -#define yyssp ada_yyssp -#define yystacksize ada_yystacksize -#define yyvs ada_yyvs -#define yyvsp ada_yyvsp - -#ifndef YYDEBUG -#define YYDEBUG 1 /* Default to yydebug support */ -#endif - -#define YYFPRINTF parser_fprintf +/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, + etc). */ +#define GDB_YY_REMAP_PREFIX ada_ +#include "yy-remap.h" struct name_info { struct symbol *sym; @@ -200,7 +149,7 @@ static struct type *type_boolean (struct parser_state *); static struct type *type_system_address (struct parser_state *); -#line 204 "ada-exp.c" /* yacc.c:339 */ +#line 153 "ada-exp.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -333,7 +282,7 @@ extern int yydebug; typedef union YYSTYPE YYSTYPE; union YYSTYPE { -#line 175 "ada-exp.y" /* yacc.c:355 */ +#line 124 "ada-exp.y" /* yacc.c:355 */ LONGEST lval; struct { @@ -350,7 +299,7 @@ union YYSTYPE struct internalvar *ivar; -#line 354 "ada-exp.c" /* yacc.c:355 */ +#line 303 "ada-exp.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -365,7 +314,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 369 "ada-exp.c" /* yacc.c:358 */ +#line 318 "ada-exp.c" /* yacc.c:358 */ #ifdef short # undef short @@ -666,19 +615,19 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 240, 240, 244, 245, 247, 252, 256, 261, 267, - 286, 286, 298, 302, 304, 312, 323, 333, 337, 340, - 343, 347, 351, 355, 359, 362, 364, 366, 368, 372, - 385, 389, 393, 397, 401, 405, 409, 413, 417, 421, - 424, 428, 432, 436, 438, 443, 451, 455, 461, 472, - 476, 480, 484, 485, 486, 487, 488, 489, 493, 495, - 500, 502, 507, 509, 514, 516, 520, 522, 534, 536, - 543, 546, 549, 552, 554, 556, 558, 560, 562, 564, - 568, 570, 575, 585, 587, 594, 598, 606, 614, 618, - 624, 626, 630, 634, 636, 638, 646, 657, 659, 664, - 673, 674, 680, 685, 691, 700, 701, 702, 706, 711, - 726, 725, 728, 731, 730, 737, 736, 739, 742, 741, - 749, 751, 753 + 0, 189, 189, 193, 194, 196, 201, 205, 210, 216, + 235, 235, 247, 251, 253, 261, 272, 282, 286, 289, + 292, 296, 300, 304, 308, 311, 313, 315, 317, 321, + 334, 338, 342, 346, 350, 354, 358, 362, 366, 370, + 373, 377, 381, 385, 387, 392, 400, 404, 410, 421, + 425, 429, 433, 434, 435, 436, 437, 438, 442, 444, + 449, 451, 456, 458, 463, 465, 469, 471, 483, 485, + 492, 495, 498, 501, 503, 505, 507, 509, 511, 513, + 517, 519, 524, 534, 536, 543, 547, 555, 563, 567, + 573, 575, 579, 583, 585, 587, 595, 606, 608, 613, + 622, 623, 629, 634, 640, 649, 650, 651, 655, 660, + 675, 674, 677, 680, 679, 686, 685, 688, 691, 690, + 698, 700, 702 }; #endif @@ -1711,42 +1660,42 @@ yyreduce: switch (yyn) { case 4: -#line 246 "ada-exp.y" /* yacc.c:1646 */ +#line 195 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_COMMA); } -#line 1718 "ada-exp.c" /* yacc.c:1646 */ +#line 1667 "ada-exp.c" /* yacc.c:1646 */ break; case 5: -#line 248 "ada-exp.y" /* yacc.c:1646 */ +#line 197 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 1724 "ada-exp.c" /* yacc.c:1646 */ +#line 1673 "ada-exp.c" /* yacc.c:1646 */ break; case 6: -#line 253 "ada-exp.y" /* yacc.c:1646 */ +#line 202 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 1730 "ada-exp.c" /* yacc.c:1646 */ +#line 1679 "ada-exp.c" /* yacc.c:1646 */ break; case 7: -#line 257 "ada-exp.y" /* yacc.c:1646 */ +#line 206 "ada-exp.y" /* yacc.c:1646 */ { write_exp_op_with_string (pstate, STRUCTOP_STRUCT, (yyvsp[0].sval)); } -#line 1737 "ada-exp.c" /* yacc.c:1646 */ +#line 1686 "ada-exp.c" /* yacc.c:1646 */ break; case 8: -#line 262 "ada-exp.y" /* yacc.c:1646 */ +#line 211 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, (yyvsp[-1].lval)); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 1747 "ada-exp.c" /* yacc.c:1646 */ +#line 1696 "ada-exp.c" /* yacc.c:1646 */ break; case 9: -#line 268 "ada-exp.y" /* yacc.c:1646 */ +#line 217 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[-3].tval) != NULL) { @@ -1763,17 +1712,17 @@ yyreduce: write_exp_elt_opcode (pstate, OP_FUNCALL); } } -#line 1768 "ada-exp.c" /* yacc.c:1646 */ +#line 1717 "ada-exp.c" /* yacc.c:1646 */ break; case 10: -#line 286 "ada-exp.y" /* yacc.c:1646 */ +#line 235 "ada-exp.y" /* yacc.c:1646 */ { type_qualifier = (yyvsp[-2].tval); } -#line 1774 "ada-exp.c" /* yacc.c:1646 */ +#line 1723 "ada-exp.c" /* yacc.c:1646 */ break; case 11: -#line 288 "ada-exp.y" /* yacc.c:1646 */ +#line 237 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[-6].tval) == NULL) error (_("Type required for qualification")); @@ -1782,39 +1731,39 @@ yyreduce: write_exp_elt_opcode (pstate, UNOP_QUAL); type_qualifier = (yyvsp[-4].tval); } -#line 1787 "ada-exp.c" /* yacc.c:1646 */ +#line 1736 "ada-exp.c" /* yacc.c:1646 */ break; case 12: -#line 298 "ada-exp.y" /* yacc.c:1646 */ +#line 247 "ada-exp.y" /* yacc.c:1646 */ { (yyval.tval) = type_qualifier; } -#line 1793 "ada-exp.c" /* yacc.c:1646 */ +#line 1742 "ada-exp.c" /* yacc.c:1646 */ break; case 13: -#line 303 "ada-exp.y" /* yacc.c:1646 */ +#line 252 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, TERNOP_SLICE); } -#line 1799 "ada-exp.c" /* yacc.c:1646 */ +#line 1748 "ada-exp.c" /* yacc.c:1646 */ break; case 14: -#line 305 "ada-exp.y" /* yacc.c:1646 */ +#line 254 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[-5].tval) == NULL) write_exp_elt_opcode (pstate, TERNOP_SLICE); else error (_("Cannot slice a type")); } -#line 1809 "ada-exp.c" /* yacc.c:1646 */ +#line 1758 "ada-exp.c" /* yacc.c:1646 */ break; case 15: -#line 312 "ada-exp.y" /* yacc.c:1646 */ +#line 261 "ada-exp.y" /* yacc.c:1646 */ { } -#line 1815 "ada-exp.c" /* yacc.c:1646 */ +#line 1764 "ada-exp.c" /* yacc.c:1646 */ break; case 16: -#line 324 "ada-exp.y" /* yacc.c:1646 */ +#line 273 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[0].tval) != NULL) { write_exp_elt_opcode (pstate, OP_TYPE); @@ -1822,71 +1771,71 @@ yyreduce: write_exp_elt_opcode (pstate, OP_TYPE); } } -#line 1827 "ada-exp.c" /* yacc.c:1646 */ +#line 1776 "ada-exp.c" /* yacc.c:1646 */ break; case 17: -#line 334 "ada-exp.y" /* yacc.c:1646 */ +#line 283 "ada-exp.y" /* yacc.c:1646 */ { write_dollar_variable (pstate, (yyvsp[0].sval)); } -#line 1833 "ada-exp.c" /* yacc.c:1646 */ +#line 1782 "ada-exp.c" /* yacc.c:1646 */ break; case 20: -#line 344 "ada-exp.y" /* yacc.c:1646 */ +#line 293 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 1839 "ada-exp.c" /* yacc.c:1646 */ +#line 1788 "ada-exp.c" /* yacc.c:1646 */ break; case 21: -#line 348 "ada-exp.y" /* yacc.c:1646 */ +#line 297 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_PLUS); } -#line 1845 "ada-exp.c" /* yacc.c:1646 */ +#line 1794 "ada-exp.c" /* yacc.c:1646 */ break; case 22: -#line 352 "ada-exp.y" /* yacc.c:1646 */ +#line 301 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1851 "ada-exp.c" /* yacc.c:1646 */ +#line 1800 "ada-exp.c" /* yacc.c:1646 */ break; case 23: -#line 356 "ada-exp.y" /* yacc.c:1646 */ +#line 305 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_ABS); } -#line 1857 "ada-exp.c" /* yacc.c:1646 */ +#line 1806 "ada-exp.c" /* yacc.c:1646 */ break; case 24: -#line 359 "ada-exp.y" /* yacc.c:1646 */ +#line 308 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 0; } -#line 1863 "ada-exp.c" /* yacc.c:1646 */ +#line 1812 "ada-exp.c" /* yacc.c:1646 */ break; case 25: -#line 363 "ada-exp.y" /* yacc.c:1646 */ +#line 312 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 1869 "ada-exp.c" /* yacc.c:1646 */ +#line 1818 "ada-exp.c" /* yacc.c:1646 */ break; case 26: -#line 365 "ada-exp.y" /* yacc.c:1646 */ +#line 314 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 1875 "ada-exp.c" /* yacc.c:1646 */ +#line 1824 "ada-exp.c" /* yacc.c:1646 */ break; case 27: -#line 367 "ada-exp.y" /* yacc.c:1646 */ +#line 316 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[-2].lval) + 1; } -#line 1881 "ada-exp.c" /* yacc.c:1646 */ +#line 1830 "ada-exp.c" /* yacc.c:1646 */ break; case 28: -#line 369 "ada-exp.y" /* yacc.c:1646 */ +#line 318 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[-4].lval) + 1; } -#line 1887 "ada-exp.c" /* yacc.c:1646 */ +#line 1836 "ada-exp.c" /* yacc.c:1646 */ break; case 29: -#line 374 "ada-exp.y" /* yacc.c:1646 */ +#line 323 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[-2].tval) == NULL) error (_("Type required within braces in coercion")); @@ -1894,98 +1843,98 @@ yyreduce: write_exp_elt_type (pstate, (yyvsp[-2].tval)); write_exp_elt_opcode (pstate, UNOP_MEMVAL); } -#line 1899 "ada-exp.c" /* yacc.c:1646 */ +#line 1848 "ada-exp.c" /* yacc.c:1646 */ break; case 30: -#line 386 "ada-exp.y" /* yacc.c:1646 */ +#line 335 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_EXP); } -#line 1905 "ada-exp.c" /* yacc.c:1646 */ +#line 1854 "ada-exp.c" /* yacc.c:1646 */ break; case 31: -#line 390 "ada-exp.y" /* yacc.c:1646 */ +#line 339 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 1911 "ada-exp.c" /* yacc.c:1646 */ +#line 1860 "ada-exp.c" /* yacc.c:1646 */ break; case 32: -#line 394 "ada-exp.y" /* yacc.c:1646 */ +#line 343 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 1917 "ada-exp.c" /* yacc.c:1646 */ +#line 1866 "ada-exp.c" /* yacc.c:1646 */ break; case 33: -#line 398 "ada-exp.y" /* yacc.c:1646 */ +#line 347 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_REM); } -#line 1923 "ada-exp.c" /* yacc.c:1646 */ +#line 1872 "ada-exp.c" /* yacc.c:1646 */ break; case 34: -#line 402 "ada-exp.y" /* yacc.c:1646 */ +#line 351 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_MOD); } -#line 1929 "ada-exp.c" /* yacc.c:1646 */ +#line 1878 "ada-exp.c" /* yacc.c:1646 */ break; case 35: -#line 406 "ada-exp.y" /* yacc.c:1646 */ +#line 355 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_REPEAT); } -#line 1935 "ada-exp.c" /* yacc.c:1646 */ +#line 1884 "ada-exp.c" /* yacc.c:1646 */ break; case 36: -#line 410 "ada-exp.y" /* yacc.c:1646 */ +#line 359 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 1941 "ada-exp.c" /* yacc.c:1646 */ +#line 1890 "ada-exp.c" /* yacc.c:1646 */ break; case 37: -#line 414 "ada-exp.y" /* yacc.c:1646 */ +#line 363 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_CONCAT); } -#line 1947 "ada-exp.c" /* yacc.c:1646 */ +#line 1896 "ada-exp.c" /* yacc.c:1646 */ break; case 38: -#line 418 "ada-exp.y" /* yacc.c:1646 */ +#line 367 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 1953 "ada-exp.c" /* yacc.c:1646 */ +#line 1902 "ada-exp.c" /* yacc.c:1646 */ break; case 40: -#line 425 "ada-exp.y" /* yacc.c:1646 */ +#line 374 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 1959 "ada-exp.c" /* yacc.c:1646 */ +#line 1908 "ada-exp.c" /* yacc.c:1646 */ break; case 41: -#line 429 "ada-exp.y" /* yacc.c:1646 */ +#line 378 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1965 "ada-exp.c" /* yacc.c:1646 */ +#line 1914 "ada-exp.c" /* yacc.c:1646 */ break; case 42: -#line 433 "ada-exp.y" /* yacc.c:1646 */ +#line 382 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_LEQ); } -#line 1971 "ada-exp.c" /* yacc.c:1646 */ +#line 1920 "ada-exp.c" /* yacc.c:1646 */ break; case 43: -#line 437 "ada-exp.y" /* yacc.c:1646 */ +#line 386 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); } -#line 1977 "ada-exp.c" /* yacc.c:1646 */ +#line 1926 "ada-exp.c" /* yacc.c:1646 */ break; case 44: -#line 439 "ada-exp.y" /* yacc.c:1646 */ +#line 388 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); } -#line 1986 "ada-exp.c" /* yacc.c:1646 */ +#line 1935 "ada-exp.c" /* yacc.c:1646 */ break; case 45: -#line 444 "ada-exp.y" /* yacc.c:1646 */ +#line 393 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[0].tval) == NULL) error (_("Right operand of 'in' must be type")); @@ -1993,29 +1942,29 @@ yyreduce: write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, UNOP_IN_RANGE); } -#line 1998 "ada-exp.c" /* yacc.c:1646 */ +#line 1947 "ada-exp.c" /* yacc.c:1646 */ break; case 46: -#line 452 "ada-exp.y" /* yacc.c:1646 */ +#line 401 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 2006 "ada-exp.c" /* yacc.c:1646 */ +#line 1955 "ada-exp.c" /* yacc.c:1646 */ break; case 47: -#line 456 "ada-exp.y" /* yacc.c:1646 */ +#line 405 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 2016 "ada-exp.c" /* yacc.c:1646 */ +#line 1965 "ada-exp.c" /* yacc.c:1646 */ break; case 48: -#line 462 "ada-exp.y" /* yacc.c:1646 */ +#line 411 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[0].tval) == NULL) error (_("Right operand of 'in' must be type")); @@ -2024,271 +1973,271 @@ yyreduce: write_exp_elt_opcode (pstate, UNOP_IN_RANGE); write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 2029 "ada-exp.c" /* yacc.c:1646 */ +#line 1978 "ada-exp.c" /* yacc.c:1646 */ break; case 49: -#line 473 "ada-exp.y" /* yacc.c:1646 */ +#line 422 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_GEQ); } -#line 2035 "ada-exp.c" /* yacc.c:1646 */ +#line 1984 "ada-exp.c" /* yacc.c:1646 */ break; case 50: -#line 477 "ada-exp.y" /* yacc.c:1646 */ +#line 426 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_LESS); } -#line 2041 "ada-exp.c" /* yacc.c:1646 */ +#line 1990 "ada-exp.c" /* yacc.c:1646 */ break; case 51: -#line 481 "ada-exp.y" /* yacc.c:1646 */ +#line 430 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_GTR); } -#line 2047 "ada-exp.c" /* yacc.c:1646 */ +#line 1996 "ada-exp.c" /* yacc.c:1646 */ break; case 58: -#line 494 "ada-exp.y" /* yacc.c:1646 */ +#line 443 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 2053 "ada-exp.c" /* yacc.c:1646 */ +#line 2002 "ada-exp.c" /* yacc.c:1646 */ break; case 59: -#line 496 "ada-exp.y" /* yacc.c:1646 */ +#line 445 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 2059 "ada-exp.c" /* yacc.c:1646 */ +#line 2008 "ada-exp.c" /* yacc.c:1646 */ break; case 60: -#line 501 "ada-exp.y" /* yacc.c:1646 */ +#line 450 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 2065 "ada-exp.c" /* yacc.c:1646 */ +#line 2014 "ada-exp.c" /* yacc.c:1646 */ break; case 61: -#line 503 "ada-exp.y" /* yacc.c:1646 */ +#line 452 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 2071 "ada-exp.c" /* yacc.c:1646 */ +#line 2020 "ada-exp.c" /* yacc.c:1646 */ break; case 62: -#line 508 "ada-exp.y" /* yacc.c:1646 */ +#line 457 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 2077 "ada-exp.c" /* yacc.c:1646 */ +#line 2026 "ada-exp.c" /* yacc.c:1646 */ break; case 63: -#line 510 "ada-exp.y" /* yacc.c:1646 */ +#line 459 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 2083 "ada-exp.c" /* yacc.c:1646 */ +#line 2032 "ada-exp.c" /* yacc.c:1646 */ break; case 64: -#line 515 "ada-exp.y" /* yacc.c:1646 */ +#line 464 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 2089 "ada-exp.c" /* yacc.c:1646 */ +#line 2038 "ada-exp.c" /* yacc.c:1646 */ break; case 65: -#line 517 "ada-exp.y" /* yacc.c:1646 */ +#line 466 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 2095 "ada-exp.c" /* yacc.c:1646 */ +#line 2044 "ada-exp.c" /* yacc.c:1646 */ break; case 66: -#line 521 "ada-exp.y" /* yacc.c:1646 */ +#line 470 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 2101 "ada-exp.c" /* yacc.c:1646 */ +#line 2050 "ada-exp.c" /* yacc.c:1646 */ break; case 67: -#line 523 "ada-exp.y" /* yacc.c:1646 */ +#line 472 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 2107 "ada-exp.c" /* yacc.c:1646 */ +#line 2056 "ada-exp.c" /* yacc.c:1646 */ break; case 68: -#line 535 "ada-exp.y" /* yacc.c:1646 */ +#line 484 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 2113 "ada-exp.c" /* yacc.c:1646 */ +#line 2062 "ada-exp.c" /* yacc.c:1646 */ break; case 69: -#line 537 "ada-exp.y" /* yacc.c:1646 */ +#line 486 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_ADDR); write_exp_elt_opcode (pstate, UNOP_CAST); write_exp_elt_type (pstate, type_system_address (pstate)); write_exp_elt_opcode (pstate, UNOP_CAST); } -#line 2124 "ada-exp.c" /* yacc.c:1646 */ +#line 2073 "ada-exp.c" /* yacc.c:1646 */ break; case 70: -#line 544 "ada-exp.y" /* yacc.c:1646 */ +#line 493 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); write_exp_elt_opcode (pstate, OP_ATR_FIRST); } -#line 2131 "ada-exp.c" /* yacc.c:1646 */ +#line 2080 "ada-exp.c" /* yacc.c:1646 */ break; case 71: -#line 547 "ada-exp.y" /* yacc.c:1646 */ +#line 496 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); write_exp_elt_opcode (pstate, OP_ATR_LAST); } -#line 2138 "ada-exp.c" /* yacc.c:1646 */ +#line 2087 "ada-exp.c" /* yacc.c:1646 */ break; case 72: -#line 550 "ada-exp.y" /* yacc.c:1646 */ +#line 499 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); write_exp_elt_opcode (pstate, OP_ATR_LENGTH); } -#line 2145 "ada-exp.c" /* yacc.c:1646 */ +#line 2094 "ada-exp.c" /* yacc.c:1646 */ break; case 73: -#line 553 "ada-exp.y" /* yacc.c:1646 */ +#line 502 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_ATR_SIZE); } -#line 2151 "ada-exp.c" /* yacc.c:1646 */ +#line 2100 "ada-exp.c" /* yacc.c:1646 */ break; case 74: -#line 555 "ada-exp.y" /* yacc.c:1646 */ +#line 504 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_ATR_TAG); } -#line 2157 "ada-exp.c" /* yacc.c:1646 */ +#line 2106 "ada-exp.c" /* yacc.c:1646 */ break; case 75: -#line 557 "ada-exp.y" /* yacc.c:1646 */ +#line 506 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_ATR_MIN); } -#line 2163 "ada-exp.c" /* yacc.c:1646 */ +#line 2112 "ada-exp.c" /* yacc.c:1646 */ break; case 76: -#line 559 "ada-exp.y" /* yacc.c:1646 */ +#line 508 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_ATR_MAX); } -#line 2169 "ada-exp.c" /* yacc.c:1646 */ +#line 2118 "ada-exp.c" /* yacc.c:1646 */ break; case 77: -#line 561 "ada-exp.y" /* yacc.c:1646 */ +#line 510 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_ATR_POS); } -#line 2175 "ada-exp.c" /* yacc.c:1646 */ +#line 2124 "ada-exp.c" /* yacc.c:1646 */ break; case 78: -#line 563 "ada-exp.y" /* yacc.c:1646 */ +#line 512 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_ATR_VAL); } -#line 2181 "ada-exp.c" /* yacc.c:1646 */ +#line 2130 "ada-exp.c" /* yacc.c:1646 */ break; case 79: -#line 565 "ada-exp.y" /* yacc.c:1646 */ +#line 514 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_ATR_MODULUS); } -#line 2187 "ada-exp.c" /* yacc.c:1646 */ +#line 2136 "ada-exp.c" /* yacc.c:1646 */ break; case 80: -#line 569 "ada-exp.y" /* yacc.c:1646 */ +#line 518 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 2193 "ada-exp.c" /* yacc.c:1646 */ +#line 2142 "ada-exp.c" /* yacc.c:1646 */ break; case 81: -#line 571 "ada-exp.y" /* yacc.c:1646 */ +#line 520 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[-1].typed_val).val; } -#line 2199 "ada-exp.c" /* yacc.c:1646 */ +#line 2148 "ada-exp.c" /* yacc.c:1646 */ break; case 82: -#line 576 "ada-exp.y" /* yacc.c:1646 */ +#line 525 "ada-exp.y" /* yacc.c:1646 */ { if ((yyvsp[0].tval) == NULL) error (_("Prefix must be type")); write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 2210 "ada-exp.c" /* yacc.c:1646 */ +#line 2159 "ada-exp.c" /* yacc.c:1646 */ break; case 84: -#line 587 "ada-exp.y" /* yacc.c:1646 */ +#line 536 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, parse_type (pstate)->builtin_void); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 2219 "ada-exp.c" /* yacc.c:1646 */ +#line 2168 "ada-exp.c" /* yacc.c:1646 */ break; case 85: -#line 595 "ada-exp.y" /* yacc.c:1646 */ +#line 544 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, (LONGEST) (yyvsp[0].typed_val).val, (yyvsp[0].typed_val).type); } -#line 2225 "ada-exp.c" /* yacc.c:1646 */ +#line 2174 "ada-exp.c" /* yacc.c:1646 */ break; case 86: -#line 599 "ada-exp.y" /* yacc.c:1646 */ +#line 548 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, convert_char_literal (type_qualifier, (yyvsp[0].typed_val).val), (type_qualifier == NULL) ? (yyvsp[0].typed_val).type : type_qualifier); } -#line 2235 "ada-exp.c" /* yacc.c:1646 */ +#line 2184 "ada-exp.c" /* yacc.c:1646 */ break; case 87: -#line 607 "ada-exp.y" /* yacc.c:1646 */ +#line 556 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_DOUBLE); write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); write_exp_elt_dblcst (pstate, (yyvsp[0].typed_val_float).dval); write_exp_elt_opcode (pstate, OP_DOUBLE); } -#line 2245 "ada-exp.c" /* yacc.c:1646 */ +#line 2194 "ada-exp.c" /* yacc.c:1646 */ break; case 88: -#line 615 "ada-exp.y" /* yacc.c:1646 */ +#line 564 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, 0, type_int (pstate)); } -#line 2251 "ada-exp.c" /* yacc.c:1646 */ +#line 2200 "ada-exp.c" /* yacc.c:1646 */ break; case 89: -#line 619 "ada-exp.y" /* yacc.c:1646 */ +#line 568 "ada-exp.y" /* yacc.c:1646 */ { write_exp_op_with_string (pstate, OP_STRING, (yyvsp[0].sval)); } -#line 2259 "ada-exp.c" /* yacc.c:1646 */ +#line 2208 "ada-exp.c" /* yacc.c:1646 */ break; case 90: -#line 625 "ada-exp.y" /* yacc.c:1646 */ +#line 574 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, 1, type_boolean (pstate)); } -#line 2265 "ada-exp.c" /* yacc.c:1646 */ +#line 2214 "ada-exp.c" /* yacc.c:1646 */ break; case 91: -#line 627 "ada-exp.y" /* yacc.c:1646 */ +#line 576 "ada-exp.y" /* yacc.c:1646 */ { write_int (pstate, 0, type_boolean (pstate)); } -#line 2271 "ada-exp.c" /* yacc.c:1646 */ +#line 2220 "ada-exp.c" /* yacc.c:1646 */ break; case 92: -#line 631 "ada-exp.y" /* yacc.c:1646 */ +#line 580 "ada-exp.y" /* yacc.c:1646 */ { error (_("NEW not implemented.")); } -#line 2277 "ada-exp.c" /* yacc.c:1646 */ +#line 2226 "ada-exp.c" /* yacc.c:1646 */ break; case 93: -#line 635 "ada-exp.y" /* yacc.c:1646 */ +#line 584 "ada-exp.y" /* yacc.c:1646 */ { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[0].sval)); } -#line 2283 "ada-exp.c" /* yacc.c:1646 */ +#line 2232 "ada-exp.c" /* yacc.c:1646 */ break; case 94: -#line 637 "ada-exp.y" /* yacc.c:1646 */ +#line 586 "ada-exp.y" /* yacc.c:1646 */ { (yyval.tval) = write_var_or_type (pstate, (yyvsp[-1].bval), (yyvsp[0].sval)); } -#line 2289 "ada-exp.c" /* yacc.c:1646 */ +#line 2238 "ada-exp.c" /* yacc.c:1646 */ break; case 95: -#line 639 "ada-exp.y" /* yacc.c:1646 */ +#line 588 "ada-exp.y" /* yacc.c:1646 */ { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[-1].sval)); if ((yyval.tval) == NULL) @@ -2296,11 +2245,11 @@ yyreduce: else (yyval.tval) = lookup_pointer_type ((yyval.tval)); } -#line 2301 "ada-exp.c" /* yacc.c:1646 */ +#line 2250 "ada-exp.c" /* yacc.c:1646 */ break; case 96: -#line 647 "ada-exp.y" /* yacc.c:1646 */ +#line 596 "ada-exp.y" /* yacc.c:1646 */ { (yyval.tval) = write_var_or_type (pstate, (yyvsp[-2].bval), (yyvsp[-1].sval)); if ((yyval.tval) == NULL) @@ -2308,190 +2257,190 @@ yyreduce: else (yyval.tval) = lookup_pointer_type ((yyval.tval)); } -#line 2313 "ada-exp.c" /* yacc.c:1646 */ +#line 2262 "ada-exp.c" /* yacc.c:1646 */ break; case 97: -#line 658 "ada-exp.y" /* yacc.c:1646 */ +#line 607 "ada-exp.y" /* yacc.c:1646 */ { (yyval.bval) = block_lookup (NULL, (yyvsp[-1].sval).ptr); } -#line 2319 "ada-exp.c" /* yacc.c:1646 */ +#line 2268 "ada-exp.c" /* yacc.c:1646 */ break; case 98: -#line 660 "ada-exp.y" /* yacc.c:1646 */ +#line 609 "ada-exp.y" /* yacc.c:1646 */ { (yyval.bval) = block_lookup ((yyvsp[-2].bval), (yyvsp[-1].sval).ptr); } -#line 2325 "ada-exp.c" /* yacc.c:1646 */ +#line 2274 "ada-exp.c" /* yacc.c:1646 */ break; case 99: -#line 665 "ada-exp.y" /* yacc.c:1646 */ +#line 614 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_AGGREGATE); write_exp_elt_longcst (pstate, (yyvsp[-1].lval)); write_exp_elt_opcode (pstate, OP_AGGREGATE); } -#line 2335 "ada-exp.c" /* yacc.c:1646 */ +#line 2284 "ada-exp.c" /* yacc.c:1646 */ break; case 100: -#line 673 "ada-exp.y" /* yacc.c:1646 */ +#line 622 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[0].lval); } -#line 2341 "ada-exp.c" /* yacc.c:1646 */ +#line 2290 "ada-exp.c" /* yacc.c:1646 */ break; case 101: -#line 675 "ada-exp.y" /* yacc.c:1646 */ +#line 624 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_POSITIONAL); write_exp_elt_longcst (pstate, (yyvsp[-1].lval)); write_exp_elt_opcode (pstate, OP_POSITIONAL); (yyval.lval) = (yyvsp[-1].lval) + 1; } -#line 2351 "ada-exp.c" /* yacc.c:1646 */ +#line 2300 "ada-exp.c" /* yacc.c:1646 */ break; case 102: -#line 681 "ada-exp.y" /* yacc.c:1646 */ +#line 630 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[-1].lval) + (yyvsp[0].lval); } -#line 2357 "ada-exp.c" /* yacc.c:1646 */ +#line 2306 "ada-exp.c" /* yacc.c:1646 */ break; case 103: -#line 686 "ada-exp.y" /* yacc.c:1646 */ +#line 635 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_POSITIONAL); write_exp_elt_longcst (pstate, 0); write_exp_elt_opcode (pstate, OP_POSITIONAL); (yyval.lval) = 1; } -#line 2367 "ada-exp.c" /* yacc.c:1646 */ +#line 2316 "ada-exp.c" /* yacc.c:1646 */ break; case 104: -#line 692 "ada-exp.y" /* yacc.c:1646 */ +#line 641 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_POSITIONAL); write_exp_elt_longcst (pstate, (yyvsp[-2].lval)); write_exp_elt_opcode (pstate, OP_POSITIONAL); (yyval.lval) = (yyvsp[-2].lval) + 1; } -#line 2377 "ada-exp.c" /* yacc.c:1646 */ +#line 2326 "ada-exp.c" /* yacc.c:1646 */ break; case 105: -#line 700 "ada-exp.y" /* yacc.c:1646 */ +#line 649 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 2383 "ada-exp.c" /* yacc.c:1646 */ +#line 2332 "ada-exp.c" /* yacc.c:1646 */ break; case 106: -#line 701 "ada-exp.y" /* yacc.c:1646 */ +#line 650 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 2389 "ada-exp.c" /* yacc.c:1646 */ +#line 2338 "ada-exp.c" /* yacc.c:1646 */ break; case 107: -#line 703 "ada-exp.y" /* yacc.c:1646 */ +#line 652 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2395 "ada-exp.c" /* yacc.c:1646 */ +#line 2344 "ada-exp.c" /* yacc.c:1646 */ break; case 108: -#line 707 "ada-exp.y" /* yacc.c:1646 */ +#line 656 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_OTHERS); } -#line 2401 "ada-exp.c" /* yacc.c:1646 */ +#line 2350 "ada-exp.c" /* yacc.c:1646 */ break; case 109: -#line 712 "ada-exp.y" /* yacc.c:1646 */ +#line 661 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_CHOICES); write_exp_elt_longcst (pstate, (yyvsp[0].lval)); write_exp_elt_opcode (pstate, OP_CHOICES); } -#line 2411 "ada-exp.c" /* yacc.c:1646 */ +#line 2360 "ada-exp.c" /* yacc.c:1646 */ break; case 110: -#line 726 "ada-exp.y" /* yacc.c:1646 */ +#line 675 "ada-exp.y" /* yacc.c:1646 */ { write_name_assoc (pstate, (yyvsp[-1].sval)); } -#line 2417 "ada-exp.c" /* yacc.c:1646 */ +#line 2366 "ada-exp.c" /* yacc.c:1646 */ break; case 111: -#line 727 "ada-exp.y" /* yacc.c:1646 */ +#line 676 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 2423 "ada-exp.c" /* yacc.c:1646 */ +#line 2372 "ada-exp.c" /* yacc.c:1646 */ break; case 112: -#line 729 "ada-exp.y" /* yacc.c:1646 */ +#line 678 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 2429 "ada-exp.c" /* yacc.c:1646 */ +#line 2378 "ada-exp.c" /* yacc.c:1646 */ break; case 113: -#line 731 "ada-exp.y" /* yacc.c:1646 */ +#line 680 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); write_exp_op_with_string (pstate, OP_NAME, empty_stoken); } -#line 2438 "ada-exp.c" /* yacc.c:1646 */ +#line 2387 "ada-exp.c" /* yacc.c:1646 */ break; case 114: -#line 735 "ada-exp.y" /* yacc.c:1646 */ +#line 684 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = 1; } -#line 2444 "ada-exp.c" /* yacc.c:1646 */ +#line 2393 "ada-exp.c" /* yacc.c:1646 */ break; case 115: -#line 737 "ada-exp.y" /* yacc.c:1646 */ +#line 686 "ada-exp.y" /* yacc.c:1646 */ { write_name_assoc (pstate, (yyvsp[-1].sval)); } -#line 2450 "ada-exp.c" /* yacc.c:1646 */ +#line 2399 "ada-exp.c" /* yacc.c:1646 */ break; case 116: -#line 738 "ada-exp.y" /* yacc.c:1646 */ +#line 687 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2456 "ada-exp.c" /* yacc.c:1646 */ +#line 2405 "ada-exp.c" /* yacc.c:1646 */ break; case 117: -#line 740 "ada-exp.y" /* yacc.c:1646 */ +#line 689 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2462 "ada-exp.c" /* yacc.c:1646 */ +#line 2411 "ada-exp.c" /* yacc.c:1646 */ break; case 118: -#line 742 "ada-exp.y" /* yacc.c:1646 */ +#line 691 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); } -#line 2468 "ada-exp.c" /* yacc.c:1646 */ +#line 2417 "ada-exp.c" /* yacc.c:1646 */ break; case 119: -#line 743 "ada-exp.y" /* yacc.c:1646 */ +#line 692 "ada-exp.y" /* yacc.c:1646 */ { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2474 "ada-exp.c" /* yacc.c:1646 */ +#line 2423 "ada-exp.c" /* yacc.c:1646 */ break; case 120: -#line 750 "ada-exp.y" /* yacc.c:1646 */ +#line 699 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 2480 "ada-exp.c" /* yacc.c:1646 */ +#line 2429 "ada-exp.c" /* yacc.c:1646 */ break; case 121: -#line 752 "ada-exp.y" /* yacc.c:1646 */ +#line 701 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 2486 "ada-exp.c" /* yacc.c:1646 */ +#line 2435 "ada-exp.c" /* yacc.c:1646 */ break; case 122: -#line 754 "ada-exp.y" /* yacc.c:1646 */ +#line 703 "ada-exp.y" /* yacc.c:1646 */ { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } -#line 2492 "ada-exp.c" /* yacc.c:1646 */ +#line 2441 "ada-exp.c" /* yacc.c:1646 */ break; -#line 2496 "ada-exp.c" /* yacc.c:1646 */ +#line 2445 "ada-exp.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2719,7 +2668,7 @@ yyreturn: #endif return yyresult; } -#line 757 "ada-exp.y" /* yacc.c:1906 */ +#line 706 "ada-exp.y" /* yacc.c:1906 */ /* yylex defined in ada-lex.c: Reads one token, getting characters */ diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y index 0feb900..0a33e10 100644 --- a/gdb/ada-exp.y +++ b/gdb/ada-exp.y @@ -50,61 +50,10 @@ #define parse_type(ps) builtin_type (parse_gdbarch (ps)) -/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), - as well as gratuitiously global symbol names, so we can have multiple - yacc generated parsers in gdb. These are only the variables - produced by yacc. If other parser generators (bison, byacc, etc) produce - additional global names that conflict at link time, then those parser - generators need to be fixed instead of adding those names to this list. */ - -/* NOTE: This is clumsy, especially since BISON and FLEX provide --prefix - options. I presume we are maintaining it to accommodate systems - without BISON? (PNH) */ - -#define yymaxdepth ada_maxdepth -/* ada_parse calls this after initialization */ -#define yyparse ada_parse_internal -#define yylex ada_lex -#define yyerror ada_error -#define yylval ada_lval -#define yychar ada_char -#define yydebug ada_debug -#define yypact ada_pact -#define yyr1 ada_r1 -#define yyr2 ada_r2 -#define yydef ada_def -#define yychk ada_chk -#define yypgo ada_pgo -#define yyact ada_act -#define yyexca ada_exca -#define yyerrflag ada_errflag -#define yynerrs ada_nerrs -#define yyps ada_ps -#define yypv ada_pv -#define yys ada_s -#define yy_yys ada_yys -#define yystate ada_state -#define yytmp ada_tmp -#define yyv ada_v -#define yy_yyv ada_yyv -#define yyval ada_val -#define yylloc ada_lloc -#define yyreds ada_reds /* With YYDEBUG defined */ -#define yytoks ada_toks /* With YYDEBUG defined */ -#define yyname ada_name /* With YYDEBUG defined */ -#define yyrule ada_rule /* With YYDEBUG defined */ -#define yyss ada_yyss -#define yysslim ada_yysslim -#define yyssp ada_yyssp -#define yystacksize ada_yystacksize -#define yyvs ada_yyvs -#define yyvsp ada_yyvsp - -#ifndef YYDEBUG -#define YYDEBUG 1 /* Default to yydebug support */ -#endif - -#define YYFPRINTF parser_fprintf +/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, + etc). */ +#define GDB_YY_REMAP_PREFIX ada_ +#include "yy-remap.h" struct name_info { struct symbol *sym; diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index d874129..05bfd7b 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -1452,6 +1452,45 @@ ada_la_decode (const char *encoded, int options) return xstrdup (ada_decode (encoded)); } +/* Implement la_sniff_from_mangled_name for Ada. */ + +static int +ada_sniff_from_mangled_name (const char *mangled, char **out) +{ + const char *demangled = ada_decode (mangled); + + *out = NULL; + + if (demangled != mangled && demangled != NULL && demangled[0] != '<') + { + /* Set the gsymbol language to Ada, but still return 0. + Two reasons for that: + + 1. For Ada, we prefer computing the symbol's decoded name + on the fly rather than pre-compute it, in order to save + memory (Ada projects are typically very large). + + 2. There are some areas in the definition of the GNAT + encoding where, with a bit of bad luck, we might be able + to decode a non-Ada symbol, generating an incorrect + demangled name (Eg: names ending with "TB" for instance + are identified as task bodies and so stripped from + the decoded name returned). + + Returning 1, here, but not setting *DEMANGLED, helps us get a + little bit of the best of both worlds. Because we're last, + we should not affect any of the other languages that were + able to demangle the symbol before us; we get to correctly + tag Ada symbols as such; and even if we incorrectly tagged a + non-Ada symbol, which should be rare, any routing through the + Ada language should be transparent (Ada tries to behave much + like C/C++ with non-Ada symbols). */ + return 1; + } + + return 0; +} + /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing suffixes that encode debugging information or leading _ada_ on SYM_NAME (see is_name_suffix commentary for the debugging @@ -2486,7 +2525,7 @@ ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size, accumSize += HOST_CHAR_BIT - unusedLS; if (accumSize >= HOST_CHAR_BIT) { - unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT); + unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT); accumSize -= HOST_CHAR_BIT; accum >>= HOST_CHAR_BIT; unpacked_bytes_left -= 1; @@ -2500,7 +2539,7 @@ ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size, while (unpacked_bytes_left > 0) { accum |= sign << accumSize; - unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT); + unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT); accumSize -= HOST_CHAR_BIT; if (accumSize < 0) accumSize = 0; @@ -7576,6 +7615,39 @@ ada_value_struct_elt (struct value *arg, char *name, int no_err) "a value that is not a record.")); } +/* Return a string representation of type TYPE. Caller must free + result. */ + +static char * +type_as_string (struct type *type) +{ + struct ui_file *tmp_stream = mem_fileopen (); + struct cleanup *old_chain; + char *str; + + tmp_stream = mem_fileopen (); + old_chain = make_cleanup_ui_file_delete (tmp_stream); + + type_print (type, "", tmp_stream, -1); + str = ui_file_xstrdup (tmp_stream, NULL); + + do_cleanups (old_chain); + return str; +} + +/* Return a string representation of type TYPE, and install a cleanup + that releases it. */ + +static char * +type_as_string_and_cleanup (struct type *type) +{ + char *str; + + str = type_as_string (type); + make_cleanup (xfree, str); + return str; +} + /* Given a type TYPE, look up the type of the component of type named NAME. If DISPP is non-null, add its byte displacement from the beginning of a structure (pointed to by a value) of type TYPE to *DISPP (does not @@ -7616,22 +7688,15 @@ ada_lookup_struct_elt_type (struct type *type, char *name, int refok, || (TYPE_CODE (type) != TYPE_CODE_STRUCT && TYPE_CODE (type) != TYPE_CODE_UNION)) { + const char *type_str; + if (noerr) return NULL; - else - { - target_terminal_ours (); - gdb_flush (gdb_stdout); - if (type == NULL) - error (_("Type (null) is not a structure or union type")); - else - { - /* XXX: type_sprint */ - fprintf_unfiltered (gdb_stderr, _("Type ")); - type_print (type, "", gdb_stderr, -1); - error (_(" is not a structure or union type")); - } - } + + type_str = (type != NULL + ? type_as_string_and_cleanup (type) + : _("(null)")); + error (_("Type %s is not a structure or union type"), type_str); } type = to_static_fixed_type (type); @@ -7701,22 +7766,10 @@ ada_lookup_struct_elt_type (struct type *type, char *name, int refok, BadName: if (!noerr) { - target_terminal_ours (); - gdb_flush (gdb_stdout); - if (name == NULL) - { - /* XXX: type_sprint */ - fprintf_unfiltered (gdb_stderr, _("Type ")); - type_print (type, "", gdb_stderr, -1); - error (_(" has no component named ")); - } - else - { - /* XXX: type_sprint */ - fprintf_unfiltered (gdb_stderr, _("Type ")); - type_print (type, "", gdb_stderr, -1); - error (_(" has no component named %s"), name); - } + const char *name_str = name != NULL ? name : _(""); + + error (_("Type %s has no component named %s"), + type_as_string_and_cleanup (type), name_str); } return NULL; @@ -12169,6 +12222,8 @@ ada_unhandled_exception_name_addr_from_raise (void) (of any type), return the address in inferior memory where the name of the exception is stored, if applicable. + Assumes the selected frame is the current frame. + Return zero if the address could not be computed, or if not relevant. */ static CORE_ADDR @@ -12470,6 +12525,13 @@ print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs) ui_out_field_int (uiout, "bkptno", b->number); ui_out_text (uiout, ", "); + /* ada_exception_name_addr relies on the selected frame being the + current frame. Need to do this here because this function may be + called more than once when printing a stop, and below, we'll + select the first frame past the Ada run-time (see + ada_find_printable_frame). */ + select_frame (get_current_frame ()); + switch (ex) { case ada_catch_exception: @@ -14031,6 +14093,11 @@ ada_read_var_value (struct symbol *var, const struct block *var_block, return default_read_var_value (var, var_block, frame); } +static const char *ada_extensions[] = +{ + ".adb", ".ads", ".a", ".ada", ".dg", NULL +}; + const struct language_defn ada_language_defn = { "ada", /* Language name */ "Ada", @@ -14040,9 +14107,10 @@ const struct language_defn ada_language_defn = { that's not quite what this means. */ array_row_major, macro_expansion_no, + ada_extensions, &ada_exp_descriptor, parse, - ada_error, + ada_yyerror, resolve, ada_printchar, /* Print a character constant */ ada_printstr, /* Function to print string constant */ @@ -14057,6 +14125,7 @@ const struct language_defn ada_language_defn = { ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */ basic_lookup_transparent_type, /* lookup_transparent_type */ ada_la_decode, /* Language specific symbol demangler */ + ada_sniff_from_mangled_name, NULL, /* Language specific class_name_from_physname */ ada_op_print_tab, /* expression operators for printing */ diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index 1480977..7de71eb 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -159,7 +159,7 @@ extern int ada_get_field_index (const struct type *type, extern int ada_parse (struct parser_state *); /* Defined in ada-exp.y */ -extern void ada_error (char *); /* Defined in ada-exp.y */ +extern void ada_yyerror (char *); /* Defined in ada-exp.y */ /* Defined in ada-typeprint.c */ extern void ada_print_type (struct type *, const char *, struct ui_file *, int, diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c index 065fbd3..d7a8360 100644 --- a/gdb/ada-typeprint.c +++ b/gdb/ada-typeprint.c @@ -363,7 +363,7 @@ static void print_fixed_point_type (struct type *type, struct ui_file *stream) { DOUBLEST delta = ada_delta (type); - DOUBLEST small = ada_fixed_to_float (type, 1.0); + DOUBLEST small = ada_fixed_to_float (type, 1); if (delta < 0.0) fprintf_filtered (stream, "delta ??"); diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c index 1114046..693d6f6 100644 --- a/gdb/aix-thread.c +++ b/gdb/aix-thread.c @@ -462,7 +462,7 @@ pdc_read_data (pthdb_user_t user, void *buf, "pdc_read_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n", user, (long) buf, hex_string (addr), len); - status = target_read_memory (addr, buf, len); + status = target_read_memory (addr, (gdb_byte *) buf, len); ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE; if (debug_aix_thread) @@ -484,7 +484,7 @@ pdc_write_data (pthdb_user_t user, void *buf, "pdc_write_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n", user, (long) buf, hex_string (addr), len); - status = target_write_memory (addr, buf, len); + status = target_write_memory (addr, (gdb_byte *) buf, len); ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE; if (debug_aix_thread) @@ -1007,10 +1007,10 @@ aix_thread_resume (struct target_ops *ops, if (arch64) ptrace64aix (PTT_CONTINUE, tid[0], (long long) 1, - gdb_signal_to_host (sig), (void *) tid); + gdb_signal_to_host (sig), (PTRACE_TYPE_ARG5) tid); else ptrace32 (PTT_CONTINUE, tid[0], (addr_ptr) 1, - gdb_signal_to_host (sig), (void *) tid); + gdb_signal_to_host (sig), (PTRACE_TYPE_ARG5) tid); } } diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c index e850aa7..6db84f9 100644 --- a/gdb/alpha-mdebug-tdep.c +++ b/gdb/alpha-mdebug-tdep.c @@ -402,8 +402,6 @@ alpha_mdebug_frame_base_sniffer (struct frame_info *this_frame) void alpha_mdebug_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - frame_unwind_append_unwinder (gdbarch, &alpha_mdebug_frame_unwind); frame_base_append_sniffer (gdbarch, alpha_mdebug_frame_base_sniffer); } diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index 0206214..b89ea13 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -1857,7 +1857,6 @@ extern initialize_file_ftype _initialize_alpha_tdep; /* -Wmissing-prototypes */ void _initialize_alpha_tdep (void) { - struct cmd_list_element *c; gdbarch_register (bfd_arch_alpha, alpha_gdbarch_init, NULL); diff --git a/gdb/amd64-darwin-tdep.c b/gdb/amd64-darwin-tdep.c index d6ed84f..b99a30b 100644 --- a/gdb/amd64-darwin-tdep.c +++ b/gdb/amd64-darwin-tdep.c @@ -26,7 +26,6 @@ #include "floatformat.h" #include "symtab.h" #include "regcache.h" -#include "libbfd.h" #include "objfiles.h" #include "i387-tdep.h" diff --git a/gdb/amd64-dicos-tdep.c b/gdb/amd64-dicos-tdep.c index 77cfb1e..e2749a5 100644 --- a/gdb/amd64-dicos-tdep.c +++ b/gdb/amd64-dicos-tdep.c @@ -25,8 +25,6 @@ static void amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - amd64_init_abi (info, gdbarch); dicos_init_abi (gdbarch); diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c index 391a646..5122b04 100644 --- a/gdb/amd64-linux-nat.c +++ b/gdb/amd64-linux-nat.c @@ -245,7 +245,7 @@ amd64_linux_store_inferior_registers (struct target_ops *ops, a request for a thread's local storage address. */ ps_err_e -ps_get_thread_area (const struct ps_prochandle *ph, +ps_get_thread_area (struct ps_prochandle *ph, lwpid_t lwpid, int idx, void **base) { if (gdbarch_bfd_arch_info (target_gdbarch ())->bits_per_word == 32) @@ -321,25 +321,25 @@ ps_get_thread_area (const struct ps_prochandle *ph, } -/* Convert a native/host siginfo object, into/from the siginfo in the +/* Convert a ptrace/host siginfo object, into/from the siginfo in the layout of the inferiors' architecture. Returns true if any conversion was done; false otherwise. If DIRECTION is 1, then copy - from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to + from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to INF. */ static int -amd64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction) +amd64_linux_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction) { struct gdbarch *gdbarch = get_frame_arch (get_current_frame ()); /* Is the inferior 32-bit? If so, then do fixup the siginfo object. */ if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32) - return amd64_linux_siginfo_fixup_common (native, inf, direction, + return amd64_linux_siginfo_fixup_common (ptrace, inf, direction, FIXUP_32); /* No fixup for native x32 GDB. */ else if (gdbarch_addr_bit (gdbarch) == 32 && sizeof (void *) == 8) - return amd64_linux_siginfo_fixup_common (native, inf, direction, + return amd64_linux_siginfo_fixup_common (ptrace, inf, direction, FIXUP_X32); else return 0; diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c index 21bcd99..3f2a92b 100644 --- a/gdb/amd64-linux-tdep.c +++ b/gdb/amd64-linux-tdep.c @@ -43,6 +43,7 @@ #include "features/i386/amd64-linux.c" #include "features/i386/amd64-avx-linux.c" #include "features/i386/amd64-mpx-linux.c" +#include "features/i386/amd64-avx-mpx-linux.c" #include "features/i386/amd64-avx512-linux.c" #include "features/i386/x32-linux.c" @@ -1590,6 +1591,11 @@ amd64_linux_core_read_description (struct gdbarch *gdbarch, return tdesc_x32_avx_linux; /* No x32 MPX falling back to AVX. */ else return tdesc_amd64_mpx_linux; + case X86_XSTATE_AVX_MPX_MASK: + if (gdbarch_ptr_bit (gdbarch) == 32) + return tdesc_x32_avx_linux; /* No x32 MPX falling back to AVX. */ + else + return tdesc_amd64_avx_mpx_linux; case X86_XSTATE_AVX_MASK: if (gdbarch_ptr_bit (gdbarch) == 32) return tdesc_x32_avx_linux; @@ -1727,8 +1733,6 @@ amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch, struct parser_state *pstate, int narg) { - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - struct frame_info *this_frame = get_selected_frame (NULL); struct stoken str; /* DTrace probe arguments can be found on the ABI-defined places for @@ -1758,7 +1762,6 @@ amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch, else { /* Additional arguments are passed on the stack. */ - CORE_ADDR sp; const char *regname = user_reg_map_regnum_to_name (gdbarch, AMD64_RSP_REGNUM); /* Displacement. */ @@ -1840,6 +1843,8 @@ amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal); set_gdbarch_get_siginfo_type (gdbarch, x86_linux_get_siginfo_type); + set_gdbarch_handle_segmentation_fault (gdbarch, + i386_linux_handle_segmentation_fault); } static void @@ -2285,6 +2290,7 @@ _initialize_amd64_linux_tdep (void) initialize_tdesc_amd64_linux (); initialize_tdesc_amd64_avx_linux (); initialize_tdesc_amd64_mpx_linux (); + initialize_tdesc_amd64_avx_mpx_linux (); initialize_tdesc_amd64_avx512_linux (); initialize_tdesc_x32_linux (); diff --git a/gdb/amd64-linux-tdep.h b/gdb/amd64-linux-tdep.h index 8673442..d64d5d6 100644 --- a/gdb/amd64-linux-tdep.h +++ b/gdb/amd64-linux-tdep.h @@ -35,6 +35,7 @@ extern struct target_desc *tdesc_amd64_linux; extern struct target_desc *tdesc_amd64_avx_linux; extern struct target_desc *tdesc_amd64_mpx_linux; +extern struct target_desc *tdesc_amd64_avx_mpx_linux; extern struct target_desc *tdesc_amd64_avx512_linux; extern struct target_desc *tdesc_x32_linux; diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index fae92b2..41b9783 100644 --- a/gdb/amd64-tdep.c +++ b/gdb/amd64-tdep.c @@ -44,6 +44,7 @@ #include "features/i386/amd64.c" #include "features/i386/amd64-avx.c" #include "features/i386/amd64-mpx.c" +#include "features/i386/amd64-avx-mpx.c" #include "features/i386/amd64-avx512.c" #include "features/i386/x32.c" @@ -455,6 +456,35 @@ amd64_pseudo_register_write (struct gdbarch *gdbarch, i386_pseudo_register_write (gdbarch, regcache, regnum, buf); } +/* Implement the 'ax_pseudo_register_collect' gdbarch method. */ + +static int +amd64_ax_pseudo_register_collect (struct gdbarch *gdbarch, + struct agent_expr *ax, int regnum) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + if (i386_byte_regnum_p (gdbarch, regnum)) + { + int gpnum = regnum - tdep->al_regnum; + + if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS) + ax_reg_mask (ax, gpnum - AMD64_NUM_LOWER_BYTE_REGS); + else + ax_reg_mask (ax, gpnum); + return 0; + } + else if (i386_dword_regnum_p (gdbarch, regnum)) + { + int gpnum = regnum - tdep->eax_regnum; + + ax_reg_mask (ax, gpnum); + return 0; + } + else + return i386_ax_pseudo_register_collect (gdbarch, ax, regnum); +} + /* Register classes as defined in the psABI. */ @@ -1272,12 +1302,10 @@ static void fixup_riprel (struct gdbarch *gdbarch, struct displaced_step_closure *dsc, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); const struct amd64_insn *insn_details = &dsc->insn_details; int modrm_offset = insn_details->modrm_offset; gdb_byte *insn = insn_details->raw_insn + modrm_offset; CORE_ADDR rip_base; - int32_t disp; int insn_length; int arch_tmp_regno, tmp_regno; ULONGEST orig_value; @@ -1286,7 +1314,6 @@ fixup_riprel (struct gdbarch *gdbarch, struct displaced_step_closure *dsc, ++insn; /* Compute the rip-relative address. */ - disp = extract_signed_integer (insn, sizeof (int32_t), byte_order); insn_length = gdb_buffered_insn_length (gdbarch, dsc->insn_buf, dsc->max_len, from); rip_base = from + insn_length; @@ -1737,15 +1764,47 @@ amd64_relocate_instruction (struct gdbarch *gdbarch, the user program would return to. */ if (insn[0] == 0xe8) { - gdb_byte push_buf[16]; - unsigned int ret_addr; + gdb_byte push_buf[32]; + CORE_ADDR ret_addr; + int i = 0; /* Where "ret" in the original code will return to. */ ret_addr = oldloc + insn_length; - push_buf[0] = 0x68; /* pushq $... */ - store_unsigned_integer (&push_buf[1], 4, byte_order, ret_addr); + + /* If pushing an address higher than or equal to 0x80000000, + avoid 'pushq', as that sign extends its 32-bit operand, which + would be incorrect. */ + if (ret_addr <= 0x7fffffff) + { + push_buf[0] = 0x68; /* pushq $... */ + store_unsigned_integer (&push_buf[1], 4, byte_order, ret_addr); + i = 5; + } + else + { + push_buf[i++] = 0x48; /* sub $0x8,%rsp */ + push_buf[i++] = 0x83; + push_buf[i++] = 0xec; + push_buf[i++] = 0x08; + + push_buf[i++] = 0xc7; /* movl $imm,(%rsp) */ + push_buf[i++] = 0x04; + push_buf[i++] = 0x24; + store_unsigned_integer (&push_buf[i], 4, byte_order, + ret_addr & 0xffffffff); + i += 4; + + push_buf[i++] = 0xc7; /* movl $imm,4(%rsp) */ + push_buf[i++] = 0x44; + push_buf[i++] = 0x24; + push_buf[i++] = 0x04; + store_unsigned_integer (&push_buf[i], 4, byte_order, + ret_addr >> 32); + i += 4; + } + gdb_assert (i <= sizeof (push_buf)); /* Push the push. */ - append_insns (to, 5, push_buf); + append_insns (to, i, push_buf); /* Convert the relative call to a relative jump. */ insn[0] = 0xe9; @@ -2997,6 +3056,8 @@ amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) amd64_pseudo_register_read_value); set_gdbarch_pseudo_register_write (gdbarch, amd64_pseudo_register_write); + set_gdbarch_ax_pseudo_register_collect (gdbarch, + amd64_ax_pseudo_register_collect); set_tdesc_pseudo_register_name (gdbarch, amd64_pseudo_register_name); @@ -3132,6 +3193,8 @@ amd64_target_description (uint64_t xcr0) return tdesc_amd64_avx512; case X86_XSTATE_MPX_MASK: return tdesc_amd64_mpx; + case X86_XSTATE_AVX_MPX_MASK: + return tdesc_amd64_avx_mpx; case X86_XSTATE_AVX_MASK: return tdesc_amd64_avx; default: @@ -3148,6 +3211,7 @@ _initialize_amd64_tdep (void) initialize_tdesc_amd64 (); initialize_tdesc_amd64_avx (); initialize_tdesc_amd64_mpx (); + initialize_tdesc_amd64_avx_mpx (); initialize_tdesc_amd64_avx512 (); initialize_tdesc_x32 (); diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c index e05502e..1bec6de 100644 --- a/gdb/amd64-windows-tdep.c +++ b/gdb/amd64-windows-tdep.c @@ -595,8 +595,6 @@ amd64_windows_frame_decode_epilogue (struct frame_info *this_frame, { /* rex jmp reg */ gdb_byte op1; - unsigned int reg; - gdb_byte buf[8]; if (target_read_memory (pc + 2, &op1, 1) != 0) return -1; @@ -648,7 +646,6 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame, address is odd (http://www.codemachine.com/article_x64deepdive.html). */ struct external_pex64_runtime_function d; - CORE_ADDR sa, ea; if (target_read_memory (cache->image_base + (unwind_info & ~1), (gdb_byte *) &d, sizeof (d)) != 0) @@ -671,7 +668,6 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame, gdb_byte *end_insns; unsigned char codes_count; unsigned char frame_reg; - unsigned char frame_off; CORE_ADDR start; /* Read and decode header. */ @@ -1016,13 +1012,7 @@ amd64_windows_frame_cache (struct frame_info *this_frame, void **this_cache) enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct amd64_windows_frame_cache *cache; gdb_byte buf[8]; - struct obj_section *sec; - pe_data_type *pe; - IMAGE_DATA_DIRECTORY *dir; - CORE_ADDR image_base; CORE_ADDR pc; - struct objfile *objfile; - unsigned long lo, hi; CORE_ADDR unwind_info = 0; if (*this_cache) @@ -1065,10 +1055,8 @@ amd64_windows_frame_prev_register (struct frame_info *this_frame, void **this_cache, int regnum) { struct gdbarch *gdbarch = get_frame_arch (this_frame); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct amd64_windows_frame_cache *cache = amd64_windows_frame_cache (this_frame, this_cache); - struct value *val; CORE_ADDR prev; if (frame_debug) @@ -1114,7 +1102,6 @@ static void amd64_windows_frame_this_id (struct frame_info *this_frame, void **this_cache, struct frame_id *this_id) { - struct gdbarch *gdbarch = get_frame_arch (this_frame); struct amd64_windows_frame_cache *cache = amd64_windows_frame_cache (this_frame, this_cache); @@ -1222,8 +1209,6 @@ amd64_windows_auto_wide_charset (void) static void amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - /* The dwarf2 unwinder (appended very early by i386_gdbarch_init) is preferred over the SEH one. The reasons are: - binaries without SEH but with dwarf2 debug info are correcly handled diff --git a/gdb/amd64bsd-nat.c b/gdb/amd64bsd-nat.c index fb7e4fa..b87672a 100644 --- a/gdb/amd64bsd-nat.c +++ b/gdb/amd64bsd-nat.c @@ -31,14 +31,10 @@ #include "amd64-tdep.h" #include "amd64-nat.h" -#include "amd64bsd-nat.h" +#include "x86bsd-nat.h" #include "inf-ptrace.h" -#ifdef PT_GETXSTATE_INFO -size_t amd64bsd_xsave_len; -#endif - /* Fetch register REGNUM from the inferior. If REGNUM is -1, do this for all registers (including the floating-point registers). */ @@ -65,11 +61,11 @@ amd64bsd_fetch_inferior_registers (struct target_ops *ops, { struct fpreg fpregs; #ifdef PT_GETXSTATE_INFO - char *xstateregs; + void *xstateregs; - if (amd64bsd_xsave_len != 0) + if (x86bsd_xsave_len != 0) { - xstateregs = alloca (amd64bsd_xsave_len); + xstateregs = alloca (x86bsd_xsave_len); if (ptrace (PT_GETXSTATE, get_ptrace_pid (inferior_ptid), (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) perror_with_name (_("Couldn't get extended state status")); @@ -118,11 +114,11 @@ amd64bsd_store_inferior_registers (struct target_ops *ops, { struct fpreg fpregs; #ifdef PT_GETXSTATE_INFO - char *xstateregs; + void *xstateregs; - if (amd64bsd_xsave_len != 0) + if (x86bsd_xsave_len != 0) { - xstateregs = alloca (amd64bsd_xsave_len); + xstateregs = alloca (x86bsd_xsave_len); if (ptrace (PT_GETXSTATE, get_ptrace_pid (inferior_ptid), (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) perror_with_name (_("Couldn't get extended state status")); @@ -130,7 +126,7 @@ amd64bsd_store_inferior_registers (struct target_ops *ops, amd64_collect_xsave (regcache, regnum, xstateregs, 0); if (ptrace (PT_SETXSTATE, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) xstateregs, amd64bsd_xsave_len) == -1) + (PTRACE_TYPE_ARG3) xstateregs, x86bsd_xsave_len) == -1) perror_with_name (_("Couldn't write extended state status")); return; } @@ -156,80 +152,8 @@ amd64bsd_target (void) { struct target_ops *t; - t = inf_ptrace_target (); + t = x86bsd_target (); t->to_fetch_registers = amd64bsd_fetch_inferior_registers; t->to_store_registers = amd64bsd_store_inferior_registers; return t; } - - -/* Support for debug registers. */ - -#ifdef HAVE_PT_GETDBREGS - -static unsigned long -amd64bsd_dr_get (ptid_t ptid, int regnum) -{ - struct dbreg dbregs; - - if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) - perror_with_name (_("Couldn't read debug registers")); - - return DBREG_DRX ((&dbregs), regnum); -} - -static void -amd64bsd_dr_set (int regnum, unsigned long value) -{ - struct dbreg dbregs; - - if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) - perror_with_name (_("Couldn't get debug registers")); - - /* For some mysterious reason, some of the reserved bits in the - debug control register get set. Mask these off, otherwise the - ptrace call below will fail. */ - DBREG_DRX ((&dbregs), 7) &= ~(0xffffffff0000fc00); - - DBREG_DRX ((&dbregs), regnum) = value; - - if (ptrace (PT_SETDBREGS, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) - perror_with_name (_("Couldn't write debug registers")); -} - -void -amd64bsd_dr_set_control (unsigned long control) -{ - amd64bsd_dr_set (7, control); -} - -void -amd64bsd_dr_set_addr (int regnum, CORE_ADDR addr) -{ - gdb_assert (regnum >= 0 && regnum <= 4); - - amd64bsd_dr_set (regnum, addr); -} - -CORE_ADDR -amd64bsd_dr_get_addr (int regnum) -{ - return amd64bsd_dr_get (inferior_ptid, regnum); -} - -unsigned long -amd64bsd_dr_get_status (void) -{ - return amd64bsd_dr_get (inferior_ptid, 6); -} - -unsigned long -amd64bsd_dr_get_control (void) -{ - return amd64bsd_dr_get (inferior_ptid, 7); -} - -#endif /* PT_GETDBREGS */ diff --git a/gdb/amd64fbsd-nat.c b/gdb/amd64fbsd-nat.c index 63a7197..66c374c 100644 --- a/gdb/amd64fbsd-nat.c +++ b/gdb/amd64fbsd-nat.c @@ -32,7 +32,7 @@ #include "fbsd-nat.h" #include "amd64-tdep.h" #include "amd64-nat.h" -#include "amd64bsd-nat.h" +#include "x86bsd-nat.h" #include "x86-nat.h" @@ -140,17 +140,6 @@ amd64fbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb) } -static void (*super_mourn_inferior) (struct target_ops *ops); - -static void -amd64fbsd_mourn_inferior (struct target_ops *ops) -{ -#ifdef HAVE_PT_GETDBREGS - x86_cleanup_dregs (); -#endif - super_mourn_inferior (ops); -} - /* Implement the to_read_description method. */ static const struct target_desc * @@ -175,13 +164,13 @@ amd64fbsd_read_description (struct target_ops *ops) if (ptrace (PT_GETXSTATE_INFO, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &info, sizeof (info)) == 0) { - amd64bsd_xsave_len = info.xsave_len; + x86bsd_xsave_len = info.xsave_len; xcr0 = info.xsave_mask; } xsave_probed = 1; } - if (amd64bsd_xsave_len != 0) + if (x86bsd_xsave_len != 0) { if (is64) return amd64_target_description (xcr0); @@ -209,22 +198,6 @@ _initialize_amd64fbsd_nat (void) /* Add some extra features to the common *BSD/i386 target. */ t = amd64bsd_target (); - -#ifdef HAVE_PT_GETDBREGS - - x86_use_watchpoints (t); - - x86_dr_low.set_control = amd64bsd_dr_set_control; - x86_dr_low.set_addr = amd64bsd_dr_set_addr; - x86_dr_low.get_addr = amd64bsd_dr_get_addr; - x86_dr_low.get_status = amd64bsd_dr_get_status; - x86_dr_low.get_control = amd64bsd_dr_get_control; - x86_set_debug_register_length (8); - -#endif /* HAVE_PT_GETDBREGS */ - - super_mourn_inferior = t->to_mourn_inferior; - t->to_mourn_inferior = amd64fbsd_mourn_inferior; t->to_read_description = amd64fbsd_read_description; fbsd_nat_add_target (t); diff --git a/gdb/annotate.c b/gdb/annotate.c index 117f122..64175a4 100644 --- a/gdb/annotate.c +++ b/gdb/annotate.c @@ -25,6 +25,7 @@ #include "observer.h" #include "inferior.h" #include "infrun.h" +#include "top.h" /* Prototypes for local functions. */ @@ -46,16 +47,6 @@ void (*deprecated_annotate_signal_hook) (void); static int frames_invalid_emitted; static int breakpoints_invalid_emitted; -/* True if the target can async, and a synchronous execution command - is not in progress. If true, input is accepted, so don't suppress - annotations. */ - -static int -async_background_execution_p (void) -{ - return (target_can_async_p () && !sync_execution); -} - static void print_value_flags (struct type *t) { @@ -70,7 +61,7 @@ annotate_breakpoints_invalid (void) { if (annotation_level == 2 && (!breakpoints_invalid_emitted - || async_background_execution_p ())) + || current_ui->prompt_state != PROMPT_BLOCKED)) { /* If the inferior owns the terminal (e.g., we're resuming), make sure to leave with the inferior still owning it. */ @@ -217,7 +208,7 @@ annotate_frames_invalid (void) { if (annotation_level == 2 && (!frames_invalid_emitted - || async_background_execution_p ())) + || current_ui->prompt_state != PROMPT_BLOCKED)) { /* If the inferior owns the terminal (e.g., we're resuming), make sure to leave with the inferior still owning it. */ diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c index fe64627..53121bc 100644 --- a/gdb/arch-utils.c +++ b/gdb/arch-utils.c @@ -132,6 +132,13 @@ generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) return 0; } +int +default_code_of_frame_writable (struct gdbarch *gdbarch, + struct frame_info *frame) +{ + return 1; +} + /* Helper functions for gdbarch_inner_than */ int @@ -850,10 +857,9 @@ default_skip_permanent_breakpoint (struct regcache *regcache) { struct gdbarch *gdbarch = get_regcache_arch (regcache); CORE_ADDR current_pc = regcache_read_pc (regcache); - const gdb_byte *bp_insn; int bp_len; - bp_insn = gdbarch_breakpoint_from_pc (gdbarch, ¤t_pc, &bp_len); + gdbarch_breakpoint_from_pc (gdbarch, ¤t_pc, &bp_len); current_pc += bp_len; regcache_write_pc (regcache, current_pc); } @@ -897,6 +903,29 @@ default_addressable_memory_unit_size (struct gdbarch *gdbarch) return 1; } +void +default_guess_tracepoint_registers (struct gdbarch *gdbarch, + struct regcache *regcache, + CORE_ADDR addr) +{ + int pc_regno = gdbarch_pc_regnum (gdbarch); + gdb_byte *regs; + + /* This guessing code below only works if the PC register isn't + a pseudo-register. The value of a pseudo-register isn't stored + in the (non-readonly) regcache -- instead it's recomputed + (probably from some other cached raw register) whenever the + register is read. In this case, a custom method implementation + should be used by the architecture. */ + if (pc_regno < 0 || pc_regno >= gdbarch_num_regs (gdbarch)) + return; + + regs = (gdb_byte *) alloca (register_size (gdbarch, pc_regno)); + store_unsigned_integer (regs, register_size (gdbarch, pc_regno), + gdbarch_byte_order (gdbarch), addr); + regcache_raw_supply (regcache, pc_regno, regs); +} + /* -Wmissing-prototypes */ extern initialize_file_ftype _initialize_gdbarch_utils; diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h index 3fad2c3..ad3f126 100644 --- a/gdb/arch-utils.h +++ b/gdb/arch-utils.h @@ -107,6 +107,9 @@ extern int generic_in_solib_return_trampoline (struct gdbarch *gdbarch, extern int generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc); +extern int default_code_of_frame_writable (struct gdbarch *gdbarch, + struct frame_info *frame); + /* By default, registers are not convertible. */ extern int generic_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type); @@ -204,4 +207,8 @@ extern char *default_gcc_target_options (struct gdbarch *gdbarch); extern const char *default_gnu_triplet_regexp (struct gdbarch *gdbarch); extern int default_addressable_memory_unit_size (struct gdbarch *gdbarch); +extern void default_guess_tracepoint_registers (struct gdbarch *gdbarch, + struct regcache *regcache, + CORE_ADDR addr); + #endif diff --git a/gdb/arch/arm-get-next-pcs.c b/gdb/arch/arm-get-next-pcs.c index e840147..f3e9fd9 100644 --- a/gdb/arch/arm-get-next-pcs.c +++ b/gdb/arch/arm-get-next-pcs.c @@ -417,7 +417,7 @@ thumb_get_next_pcs_raw (struct arm_get_next_pcs *self) unsigned long cond = bits (inst1, 8, 11); if (cond == 0x0f) /* 0x0f = SWI */ { - nextpc = self->ops->syscall_next_pc (self, pc); + nextpc = self->ops->syscall_next_pc (self); } else if (cond != 0x0f && condition_true (cond, status)) nextpc = pc_val + (sbits (inst1, 0, 7) << 1); @@ -889,7 +889,7 @@ arm_get_next_pcs_raw (struct arm_get_next_pcs *self) break; case 0xf: /* SWI */ { - nextpc = self->ops->syscall_next_pc (self, pc); + nextpc = self->ops->syscall_next_pc (self); } break; @@ -923,5 +923,16 @@ arm_get_next_pcs (struct arm_get_next_pcs *self) next_pcs = arm_get_next_pcs_raw (self); } + if (self->ops->fixup != NULL) + { + CORE_ADDR nextpc; + int i; + + for (i = 0; VEC_iterate (CORE_ADDR, next_pcs, i, nextpc); i++) + { + nextpc = self->ops->fixup (self, nextpc); + VEC_replace (CORE_ADDR, next_pcs, i, nextpc); + } + } return next_pcs; } diff --git a/gdb/arch/arm-get-next-pcs.h b/gdb/arch/arm-get-next-pcs.h index 7cb0858..5525ee2 100644 --- a/gdb/arch/arm-get-next-pcs.h +++ b/gdb/arch/arm-get-next-pcs.h @@ -19,6 +19,7 @@ #ifndef ARM_GET_NEXT_PCS_H #define ARM_GET_NEXT_PCS_H 1 +#include "gdb_vecs.h" /* Forward declaration. */ struct arm_get_next_pcs; @@ -27,9 +28,12 @@ struct arm_get_next_pcs; struct arm_get_next_pcs_ops { ULONGEST (*read_mem_uint) (CORE_ADDR memaddr, int len, int byte_order); - CORE_ADDR (*syscall_next_pc) (struct arm_get_next_pcs *self, CORE_ADDR pc); + CORE_ADDR (*syscall_next_pc) (struct arm_get_next_pcs *self); CORE_ADDR (*addr_bits_remove) (struct arm_get_next_pcs *self, CORE_ADDR val); int (*is_thumb) (struct arm_get_next_pcs *self); + + /* Fix up PC if needed. */ + CORE_ADDR (*fixup) (struct arm_get_next_pcs *self, CORE_ADDR pc); }; /* Context for a get_next_pcs call on ARM. */ diff --git a/gdb/arch/arm-linux.c b/gdb/arch/arm-linux.c index b43e484..7e240fe 100644 --- a/gdb/arch/arm-linux.c +++ b/gdb/arch/arm-linux.c @@ -18,8 +18,10 @@ along with this program. If not, see . */ #include "common-defs.h" +#include "common-regcache.h" #include "arch/arm.h" #include "arm-linux.h" +#include "arch/arm-get-next-pcs.h" /* Calculate the offset from stack pointer of the pc register on the stack in the case of a sigreturn or sigreturn_rt syscall. */ @@ -55,3 +57,83 @@ arm_linux_sigreturn_next_pc_offset (unsigned long sp, return pc_offset; } + +/* Implementation of "fixup" method of struct arm_get_next_pcs_ops + for arm-linux. */ + +CORE_ADDR +arm_linux_get_next_pcs_fixup (struct arm_get_next_pcs *self, + CORE_ADDR nextpc) +{ + /* The Linux kernel offers some user-mode helpers in a high page. We can + not read this page (as of 2.6.23), and even if we could then we + couldn't set breakpoints in it, and even if we could then the atomic + operations would fail when interrupted. They are all (tail) called + as functions and return to the address in LR. However, when GDB single + step this instruction, this instruction isn't executed yet, and LR + may not be updated yet. In other words, GDB can get the target + address from LR if this instruction isn't BL or BLX. */ + if (nextpc > 0xffff0000) + { + int bl_blx_p = 0; + CORE_ADDR pc = regcache_read_pc (self->regcache); + int pc_incr = 0; + + if (self->ops->is_thumb (self)) + { + unsigned short inst1 + = self->ops->read_mem_uint (pc, 2, self->byte_order_for_code); + + if (bits (inst1, 8, 15) == 0x47 && bit (inst1, 7)) + { + /* BLX Rm */ + bl_blx_p = 1; + pc_incr = 2; + } + else if (thumb_insn_size (inst1) == 4) + { + unsigned short inst2; + + inst2 = self->ops->read_mem_uint (pc + 2, 2, + self->byte_order_for_code); + + if ((inst1 & 0xf800) == 0xf000 && bits (inst2, 14, 15) == 0x3) + { + /* BL